一. @ConfigurationProperties注解主要用来把properties配置文件转化为bean来使用的,而@EnableConfigurationProperties注解的作用是@ConfigurationProperties注解生效。如果只配置@ConfigurationProperties注解,在IOC容器中是获取不到properties配置文件转化的bean的。
如下自定义一个类:
@Component
@ConfigurationProperties(prefix = "hhc")
public class HhcConfig {
private String name;
private Integer age;
@Override
public String toString() {
return "HhcConfig{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
上面和 @Value("${hhc.age}")一样
@Value("${hhc.name}")
private String name;
@Value("${hhc.age}")
private Integer age;
二. 创建一个类HhcConfig ,把配置文件转化为bean来使用。@ConfigurationProperties注解可以把HhcConfig文件转化为bean,然后使用@Component注解把该bean注入到IOC容器中。
application.yml如下定义:
hhc:
name: hanhongchao
age: 13
三. 用@EnableConfigurationProperties注解使@ConfigurationProperties生效,并从IOC容器中获取bean,
@EnableScheduling
@EnableCaching
@SpringBootApplication
public class TransactionApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(TransactionApplication.class, args);
System.out.println(context.getBean(HhcConfig.class));
}
}
-
启动类如上,@ComponentScan注解默认扫描启动类所在的包,该包下的类如果注入到了IOC容器中,那么在该启动类就能获取注入的bean。然后用@EnableConfigurationProperties注解使@ConfigurationProperties注解生效。因此在该启动类中就可以获取刚才application.yml配置文件转化的bean了。
-
另外,只使用@SpringBootApplication一个注解也是可以的,因为@SpringBootApplication注解中已经包含了@ComponentScan和@EnableAutoConfiguration注解,@EnableAutoConfiguration注解最终使ConfigurationPropertiesAutoConfiguration类上的@EnableAutoConfiguration生效。
四. 运行如下
2021-01-20 15:21:32.202 INFO 19600 --- [ main] c.e.transaction.TransactionApplication : Started TransactionApplication in 5.901 seconds (JVM running for 7.382)
HhcConfig{name='hanhongchao', age=13}