@EnableConfigurationProperties 註解

作用

@EnableConfigurationProperties註解的作用是:使使用 @ConfigurationProperties 註解的類生效。

說明

如果一個配置類只配置@ConfigurationProperties註解,而沒有使用@Component,那麼在IOC容器中是獲取不到properties 配置檔案轉化的bean。說白了 @EnableConfigurationProperties 相當於把使用 @ConfigurationProperties 的類進行了一次注入。測試發現 @ConfigurationProperties 與 @EnableConfigurationProperties 關係特別大。

@ConfigurationProperties VS @EnableConfigurationProperties

@EnableConfigurationProperties 文件中解釋:當@EnableConfigurationProperties註解應用到你的@Configuration時, 任何被@ConfigurationProperties註解的beans將自動被Environment屬性配置。這種風格的配置特別適合與SpringApplication的外部YAML配置進行配合使用。

使用 @EnableConfigurationProperties 進行註冊

@ConfigurationProperties(prefix = “service。properties”)public class HelloServiceProperties { private static final String SERVICE_NAME = “test-service”; private String msg = SERVICE_NAME; set/get}@Configuration@EnableConfigurationProperties(HelloServiceProperties。class)@ConditionalOnClass(HelloService。class)@ConditionalOnProperty(prefix = “hello”, value = “enable”, matchIfMissing = true)public class HelloServiceAutoConfiguration {}@RestControllerpublic class ConfigurationPropertiesController { @Autowired private HelloServiceProperties helloServiceProperties; @RequestMapping(“/getObjectProperties”) public Object getObjectProperties () { System。out。println(helloServiceProperties。getMsg()); return myConfigTest。getProperties(); }}

自動配置設定

service。properties。name=my-test-nameservice。properties。ip=192。168。1。1service。user=kayleservice。port=8080

一切正常,但是 HelloServiceAutoConfiguration 頭部不使用@EnableConfigurationProperties,測訪問報錯。

如果不使用 @EnableConfigurationProperties 進行註冊,使用 @Component 註冊

@ConfigurationProperties(prefix = “service。properties”)@Componentpublic class HelloServiceProperties { private static final String SERVICE_NAME = “test-service”; private String msg = SERVICE_NAME; public String getMsg() { return msg; } public void setMsg(String msg) { this。msg = msg; }}

Controller 不變,一切正常,如果註釋掉 @Component 測啟動報錯。由此證明,兩種方式都是將被 @ConfigurationProperties 修飾的類,載入到 Spring Env 中。

TAG: