IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> @EnableConfigurationProperties和@ConfigurationProperties用法及注意事项 -> 正文阅读

[Java知识库]@EnableConfigurationProperties和@ConfigurationProperties用法及注意事项

作者:recommend-item-box type_blog clearfix

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

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

1、@ConfigurationProperties

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

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

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

@ConfigurationProperties(prefix = "aws.ltbus")
public class Ltbus {
    String username;
    String password;
}

通常这个注解是配合@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 {
}
@ConfigurationProperties(prefix = "aws.ltbus")
public class Ltbus {
    String username;
    String password;
}

这里要注意,@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天。

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

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 18:50:24  更:2022-08-19 18:53:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:03:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码