@EnableConfigurationProperties 注解的作用是:让使用了 @ConfigurationProperties 注解的类生效,并且将该类注入到 IOC 容器中,交由 IOC 容器进行管理

一、只使用 @ConfigurationProperties 注解

如果一个类只配置了 @ConfigurationProperties 注解,而没有使用 @Component 注解将该类加入到 IOC 容器中,那么它就不能完成 xxx.properties 配置文件和 Java Bean 的数据绑定

1、application.properties





1


2




​xiaomao.name=xiaomaomao​


​xiaomao.age=​​​​27​



2、MyConfigurationProperties.java:这个实体类中必须要加上 @Component ,使这个类注入到 IOC 容器中,否则就无法从容器中获取到这个类的对象实例





1


2


3


4


5


6


7


8




​@Component​


​@ConfigurationProperties​​​​(prefix = ​​​​"xiaomao"​​​​)​


​public​​ ​​class​​ ​​MyConfigurationProperties {​


​// 省略 get、set、toString方法​


​private​​ ​​String name;​


​private​​ ​​Integer age;​


​private​​ ​​String gender;​


​}​



3、HelloController.java





1


2


3


4


5


6


7


8


9


10


11




​@RestController​


​public​​ ​​class​​ ​​HelloController {​


​@Autowired​


​private​​ ​​MyConfigurationProperties config;​


 


​@GetMapping​​​​(​​​​"/config"​​​​)​


​private​​ ​​String testConfigurationProperties(){​


​System.out.println(config);​


​return​​ ​​"SUCCESS!!!"​​​​;​


​}​


​}​



4、测试结果





1




​MyConfigurationProperties{name=​​​​'xiaomaomao'​​​​, age=​​​​27​​​​, gender=​​​​'null'​​​​}​



  

二、使用 @EnableConfigurationProperties 注解

1、添加一个 HelloService 类





1


2


3


4


5


6




​// 注入到 IOC 容器中,交由 Spring 进行管理​


​@Service​


​// 该注解的作用是使 MyConfigurationProperties 这个类上标注的 @ConfigurationProperties 注解生效,并且会自动将这个类注入到 IOC 容器中​


​@EnableConfigurationProperties​​​​(MyConfigurationProperties.​​​​class​​​​)​


​public​​ ​​class​​ ​​HelloServiceImpl ​​​​implements​​ ​​HelloService {​


​}​



2、MyConfigurationProperties.java:有了 @EnableConfigurationProperties 注解之后该实体类就不需要加上 @Component 注解了





1


2


3


4


5


6


7




​@ConfigurationProperties​​​​(prefix = ​​​​"xiaomao"​​​​)​


​public​​ ​​class​​ ​​MyConfigurationProperties {​


​// 省略 get、set、toString方法​


​private​​ ​​String name;​


​private​​ ​​Integer age;​


​private​​ ​​String gender;​


​}​



3、HelloController.java





1


2


3


4


5


6


7


8


9


10


11




​@RestController​


​public​​ ​​class​​ ​​HelloController {​


​@Autowired​


​private​​ ​​MyConfigurationProperties config;​


 


​@GetMapping​​​​(​​​​"/config"​​​​)​


​private​​ ​​String testConfigurationProperties(){​


​System.out.println(config);​


​return​​ ​​"SUCCESS!!!"​​​​;​


​}​


​}​



4、测试结果





1




​MyConfigurationProperties{name=​​​​'xiaomaomao'​​​​, age=​​​​27​​​​, gender=​​​​'null'​​​​}​



 

三、结论 

如果要使 xxx.properties 配置文件与 Java Bean 动态绑定,那么就必须将这个 Java Bean 加入到容器中,并且需要在该类上使用 @ConfigurationProperties 注解

@EnableConfigurationProperties(A.class)的作用就是如果 A 这个类上使用了 @ConfigurationProperties 注解,那么 A 这个类会与 xxx.properties 进行动态绑定,并且会将 A 这个类加入 IOC 容器中,并交由 IOC 容器进行管理