SpringBoot中的@EnableConfigurationProperties注解详细解析

 更新时间:2024年01月31日 08:51:19   作者:你的小伙伴啊  
这篇文章主要介绍了SpringBoot中的@EnableConfigurationProperties注解详细解析,如果一个配置类只配置@ConfigurationProperties注解,而没有使用@Component或者实现了@Component的其他注解,那么在IOC容器中是获取不到properties 配置文件转化的bean,需要的朋友可以参考下

1.概述

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

如果一个配置类只配置@ConfigurationProperties注解,而没有使用@Component或者实现了@Component的其他注解,那么在IOC容器中是获取不到properties 配置文件转化的bean。说白了 @EnableConfigurationProperties 相当于把使用 @ConfigurationProperties 的类进行了一次注入。

简单点说@EnableConfigurationProperties的功能类似于@Component。

2.测试

2.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();
    }
}

配置文件application.properties

service.properties.name=my-test-name
service.properties.ip=192.168.1.1
service.user=kayle
service.port=8080

一切正常,但是 HelloServiceAutoConfiguration 头部不使用 @EnableConfigurationProperties,测访问报错。

2.2 使用 @Component 注册

不使用 @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 中。

3.项目中的使用场景

如下,在配置类NacosConfigAutoConfiguration的头上加注解@EnableConfigurationProperties(NacosConfigProperties.class),

而在NacosConfigProperties配置类本身并没有实现了@Component相关的注解,也就是说运行项目时,不会直接把NacosConfigProperties配置类注入到Spring 容器中,而是在执行NacosConfigAutoConfiguration这个配置类时才会去把NacosConfigProperties类注入到spring

如下,NacosConfigProperties类本身并没有@Component相关注解:

到此这篇关于SpringBoot中的@EnableConfigurationProperties注解详细解析的文章就介绍到这了,更多相关@EnableConfigurationProperties注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中@DateTimeFormat和@JsonFormat注解介绍

    Java中@DateTimeFormat和@JsonFormat注解介绍

    @DateTimeFormat和@JsonFormat都是处理时间格式化问题的,把其他类型转换成自己需要的时间类型,下面这篇文章主要给大家介绍了关于Java中@DateTimeFormat和@JsonFormat注解介绍的相关资料,需要的朋友可以参考下
    2022-11-11
  • SpringBoot详细讲解断言机制原理

    SpringBoot详细讲解断言机制原理

    断言Assertion是测试方法中的核心部分,用来对测试需要满足的条件进行验证。这些断言方法都是org.junit.jupiter.api.Assertions的静态方法。检查业务逻辑返回的数据是否合理。所有的测试运行结束以后,会有一个详细的测试报告
    2022-06-06
  • Spring集成JPA配置懒加载报错解决方案

    Spring集成JPA配置懒加载报错解决方案

    这篇文章主要介绍了Spring集成JPA配置懒加载报错解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • 在SpringBoot中使用MongoDB完成数据存储

    在SpringBoot中使用MongoDB完成数据存储

    本文主要介绍了在SpringBoot中如恶化使用MongoDB完成数据存储,接下来这篇我们将围绕MongoDB进行,MongoDB是一个开源的,面向文档的NoSQL数据库管理系统,使用类似JSON的BSON(二进制JSON)格式来存储数据,具有灵活的数据模型和强大的查询功能,需要的朋友可以参考下
    2023-11-11
  • Java POI导出Excel时合并单元格没有边框的问题解决

    Java POI导出Excel时合并单元格没有边框的问题解决

    这篇文章主要给大家介绍了关于Java POI导出Excel时合并单元格没有边框的问题解决办法,文中通过代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友可以参考下
    2023-07-07
  • Maven工程打包jar的多种方式

    Maven工程打包jar的多种方式

    Maven打包一般可以生成两种包一种是可以直接运行的包,一种是依赖包(只是编译包),这篇文章主要介绍了Maven工程打包jar的多种方式步骤详解,需要的朋友可以参考下
    2023-04-04
  • Java延时执行的三种实现方式

    Java延时执行的三种实现方式

    本文主要介绍了Java延时执行的三种实现方式,主要包括了Thread.sleep()方法,.sleep()使用Timer类或使用ScheduledExecutorService接口,感兴趣的可以了解一下
    2023-12-12
  • SpringBoot+Mybatis-Plus实现mysql读写分离方案的示例代码

    SpringBoot+Mybatis-Plus实现mysql读写分离方案的示例代码

    这篇文章主要介绍了SpringBoot+Mybatis-Plus实现mysql读写分离方案的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • SpringBoot部署在Weblogic的操作步骤

    SpringBoot部署在Weblogic的操作步骤

    这篇文章主要介绍了SpringBoot部署在Weblogic的操作步骤,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 解决微服务feign调用添加token的问题

    解决微服务feign调用添加token的问题

    这篇文章主要介绍了解决微服务feign调用添加token的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论