ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

@EnableConfigurationProperties和@ConfigurationProperties用法及注意事项

2022-08-21 12:30:29  阅读:110  来源: 互联网

标签:容器 bean ConfigurationProperties 注意事项 注解 Ltbus EnableConfigurationProperties


在开发过程中,我们经常看到以下2个注解:
@ConfigurationProperties
@EnableConfigurationProperties

一、先分别介绍一下这两个注解的用法:

1、@ConfigurationProperties

是springboot提供读取配置文件的一个注解,将我们项目中的yaml文件或者properties文件加载到bean对象进行使用。例如:当我们application.properties里面有如下 2个配置

aws.ltbus.username=1
aws.ltbus.password=2
  • 1
  • 2

我们可以通过类使用注解@ConfigurationProperties(prefix = “aws.ltbus”)将其初始化到类Ltbus中,也可以@Value一个一个获取配置,但是配置多的情况就显得特别臃肿繁琐。

@ConfigurationProperties(prefix = "aws.ltbus")
public class Ltbus {
    String username;
    String password;
}
  • 1
  • 2
  • 3
  • 4
  • 5

通常这个注解是配合@Component进行使用,不然就没有意义了,因为我们正是需要从配置类中将配置读取到spring的IOC容器中,方便在其他bean类中进行获取使用。如果不加@Component,配置类是没办法加载到容器中的。
我们也经常看到@ConfigurationProperties和@Configuration配合使用,这里其实跟@Controller/@Service等的意思一样,看一下注解的源码就清楚了(都含有@Component,为了让人直观了解被该注解定义的是个配置类)
在这里插入图片描述

2、@EnableConfigurationProperties

@EnableConfigurationProperties的作用是把springboot配置文件中的值与我们的xxxProperties.java的属性进行绑定,需要配合@ConfigurationProperties使用。
除了前面提到的@ConfigurationProperties加@Configuration或@Component实现配置文件的容器注入外,还有一种方法就是通过@EnableConfigurationProperties实现,如下代码实现

@Configuration
@EnableConfigurationProperties(Ltbus.class)
public class AwsConfig {
}
  • 1
  • 2
  • 3
  • 4
@ConfigurationProperties(prefix = "aws.ltbus")
public class Ltbus {
    String username;
    String password;
}
  • 1
  • 2
  • 3
  • 4
  • 5

这里要注意,@EnableConfigurationProperties中引用的类一定要加@ConfigurationProperties这个注解,并且不需要再添加@Component注解,不然会导致被@ConfigurationProperties注解的类,在容器中实例化了2个bean对象:1、被@Component实例化注入到容器中,2、被@EnableConfigurationProperties实例化注入到容器中,此时如果我们使用@Aware获取Ltbus类的bean对象,有一定概率会导致程序报错,为什么说有一定概率呢?
使用@EnableConfigurationProperties往容器中注入的bean,他的bean命名规则是:前缀-类路径
例如,我们让上面2种情况都加,运行springboot项目,发现容器正常运行,并且Ltbus生成了2个不同名的bean对象
在这里插入图片描述
但是我在大型项目中,同样的定义和配置,却报了另外一个错误:在对象注入时,发现有容器中存在2个同名bean对象
在这里插入图片描述
有没有大神来解疑一下,springboot版本均是2.1.3-RELEASE,困扰了我2天。

结尾:
既然我们知道了问题原因,以后注意使用规范就好了,源码层面有时间还是要追一下代码看看的。


原文转载:https://blog.csdn.net/yuec1998/article/details/126357003

标签:容器,bean,ConfigurationProperties,注意事项,注解,Ltbus,EnableConfigurationProperties
来源: https://www.cnblogs.com/dusucyy/p/16609788.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有