SpringBoot中@ConfigurationProperties和@EnableConfigurationProperties配合使用

一. @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}
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页