先說作用:
@EnableConfigurationProperties注解的作用是:使使用 @ConfigurationProperties 注解的類生效妖滔。
說明:
如果一個配置類只配置@ConfigurationProperties注解粉渠,而沒有使用@Component畦韭,那么在IOC容器中是獲取不到properties 配置文件轉(zhuǎn)化的bean。說白了 @EnableConfigurationProperties 相當(dāng)于把使用 @ConfigurationProperties 的類進行了一次注入愤兵。
測試發(fā)現(xiàn) @ConfigurationProperties 與 @EnableConfigurationProperties 關(guān)系特別大肋坚。
測試證明:
@ConfigurationProperties
與 @EnableConfigurationProperties
的關(guān)系柄延。
@EnableConfigurationProperties
文檔中解釋:
當(dāng)@EnableConfigurationProperties
注解應(yīng)用到你的@Configuration
時, 任何被@ConfigurationProperties
注解的beans將自動被Environment屬性配置挎峦。 這種風(fēng)格的配置特別適合與SpringApplication的外部YAML配置進行配合使用香追。
測試發(fā)現(xiàn):
1.使用 @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 {
}
@RestController
public class ConfigurationPropertiesController {
@Autowired
private HelloServiceProperties helloServiceProperties;
@RequestMapping("/getObjectProperties")
public Object getObjectProperties () {
System.out.println(helloServiceProperties.getMsg());
return myConfigTest.getProperties();
}
}
自動配置設(shè)置
service.properties.name=my-test-name
service.properties.ip=192.168.1.1
service.user=kayle
service.port=8080
一切正常,但是 HelloServiceAutoConfiguration 頭部不使用 @EnableConfigurationProperties
浑测,測訪問報錯翅阵。
2.不使用 @EnableConfigurationProperties
進行注冊,使用 @Component
注冊
@ConfigurationProperties(prefix = "service.properties")
@Component
public 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 中。