詳解Spring Boot中的@ConfigurationProperties和@Value

一、@ConfigurationProperties的使用

Spring Boot中的@ConfigurationProperties註解可以將配置文件中的屬性值綁定到Java Bean中,通過保持這些屬性的命名和Java Bean的欄位名相同,它們可以自動地映射。這樣就不需要手動地讀取配置文件了,可以更加方便地進行屬性值的管理。

首先,需要在Java Bean類中添加@ConfigurationProperties註解,並指定前綴。例如:

@ConfigurationProperties(prefix = "myconfig")
public class MyConfig {
    private String name;
    private int age;
    // getter and setter
}

這裡指定了前綴為”myconfig”,然後在配置文件中添加對應的屬性:

myconfig.name=John
myconfig.age=25

在應用啟動後,Spring會自動將這些屬性值綁定到MyConfig類的實例中:

@Autowired
private MyConfig myConfig;

這樣就可以直接使用myConfig中的屬性了。

當然,這裡還有一些其他的用法:

  • 可以用註解參數ignoreUnknownFields=false來指定是否忽略未知屬性。
  • 可以用註解參數ignoreInvalidFields=false來指定是否忽略無效屬性。
  • 可以用註解參數locations來指定屬性文件的位置。

二、@Value的使用

相比@ConfigurationProperties註解,@Value註解更適合用於讀取單個屬性。它可以將屬性值直接注入到Java Bean中,而不需要使用配置文件。

在Java Bean類中,可以直接使用@Value註解來標記屬性,例如:

public class MyConfig {
    @Value("${myconfig.name}")
    private String name;
    @Value("${myconfig.age}")
    private int age;
    // getter and setter
}

這裡使用了${}來引用屬性值,並使用@Value註解來指定屬性名。在使用這些屬性時,需要將這些屬性值注入到Spring管理的Bean中:

@Autowired
private Environment env;
@Bean
public MyConfig getMyConfig() {
    MyConfig myConfig = new MyConfig();
    myConfig.setName(env.getProperty("myconfig.name"));
    myConfig.setAge(Integer.valueOf(env.getProperty("myconfig.age")));
    return myConfig;
}

這裡使用了Environment類來獲取屬性值,並將這些值注入到MyConfig類的實例中。

三、小結

@ConfigurationProperties註解和@Value註解都是Spring Boot中常用的屬性注入方式。前者適用於讀取多個屬性,且可以映射到指定的Java Bean中;後者適用於讀取單個屬性。使用這些註解可以大大簡化代碼,提高應用的可維護性。

完整代碼示例:

MyConfig.java

@ConfigurationProperties(prefix = "myconfig")
public class MyConfig {
  private String name;
  private int age;
  // getter and setter
}

application.properties

myconfig.name=John
myconfig.age=25

MainApp.java

@SpringBootApplication
public class MainApp {
    @Autowired
    private MyConfig myConfig;
    @Value("${myconfig.name}")
    private String name;
    @Value("${myconfig.age}")
    private int age;
    public static void main(String[] args) {
        SpringApplication.run(MainApp.class, args);
    }
    @GetMapping("/myconfig")
    public String getConfig() {
        return "name:" + myConfig.getName() + ",age:" + myConfig.getAge();
    }
    @GetMapping("/value")
    public String getValue() {
        return "name:" + name + ",age:" + age;
    }
}

在瀏覽器中訪問http://localhost:8080/myconfig和http://localhost:8080/value,就可以看到屬性值的輸出了。

原創文章,作者:VFUEA,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/369701.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
VFUEA的頭像VFUEA
上一篇 2025-04-13 11:45
下一篇 2025-04-13 11:45

相關推薦

發表回復

登錄後才能評論