@EnableConfigurationProperties 注解的使用

先说作用:

@EnableConfigurationProperties注解的作用是:使使用 @ConfigurationProperties 注解的类生效

/**
 * 要使用构造函数绑定,必须使用@EnableConfigurationProperties或配置属性扫描启用类。
 * 不能对由常规 Spring 机制创建的 Bean 使用构造函数绑定(例如@Component Bean、通过
 * @Bean 方法创建的 Bean 或使用@Import 加载的 Bean
 */

说明:

用springboot开发的过程中,我们会用到@ConfigurationProperties注解,主要是用来把properties或者yml配置文件转化为bean来使用的,而@EnableConfigurationProperties注解的作用是@ConfigurationProperties注解生效。
如果只配置@ConfigurationProperties注解,在IOC容器中是获取不到properties配置文件转化的bean的,当然在@ConfigurationProperties加入注解的类上加@Component也可以使交于springboot管理。

说白了 @EnableConfigurationProperties 相当于把使用 @ConfigurationProperties 的类进行了一次注入。
 

测试:
@ConfigurationProperties 与 @EnableConfigurationProperties 的关系。

@EnableConfigurationProperties 文档中解释:
@EnableConfigurationProperties注解应用到你的@Configuration时, 任何被@ConfigurationProperties注解的beans将自动被Environment属性配置。 这种风格的配置特别适合与SpringApplication的外部YAML配置进行配合使用。

测试发现:
1.使用 @EnableConfigurationProperties  Controller类

@RestController
@EnableConfigurationProperties(AcmeProperties.class)
public class YamlController {

    @Autowired
    private AcmeProperties acmeProperties;

    @GetMapping("test")
    public AcmeProperties acme(){
        System.out.println(acmeProperties);
        return acmeProperties;
    }

}

 

2.@ConfigurationProperties

@Data
@ConfigurationProperties("acme")
@ConstructorBinding
public class AcmeProperties {
    private boolean enabled;
    private InetAddress remoteAddress;
    private  Security security ;

    public AcmeProperties(boolean enabled, InetAddress remoteAddress ,Security security) {
        this.enabled = enabled;
        this.remoteAddress = remoteAddress;
        this.security = security;
    }

    @Data
    public static class Security{
        private String username;
        private String password;
        private List roles = new ArrayList<>();

        public Security(String username, String password, List roles) {
            this.username = username;
            this.password = password;
            this.roles = roles;
        }
    }
}

 

你可能感兴趣的:(springboot,java)