注解ConfigurationProperties、EnableConfigurationProperties的用法

news2025/2/28 3:48:58

1 @ConfigurationProperties

@ConfigurationProperties主要作用就是将prefix属性指定的前缀配置项的值绑定到这个JavaBean上 ,通过指定的前缀,来绑定配置文件中的配置。这样的好处是将配置数据与JOPO进行转换,能够管理一个类别的所有配置信息,一次性加载,便于操作
在这里插入图片描述
由上图可知,@Target({ ElementType.TYPE, ElementType.METHOD }) ConfigurationProperties注解可用在类上和方法上(必须是配置类中的标注了@Bean注解的方法)。接下来我将用代码来演示@ConfigurationProperties的两种用途。演示项目的解构为maven项目,引入的相关依赖为


 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
 </parent>

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
 </dependency>


 <dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
     <version>1.18.24</version>
 </dependency>

application.yml配置文件信息如下

userinfo:
  id: 1
  username: lyf
  password: xxxxxxx
  email: it-api@mail.xxxxx.com


userinfo1:
  id: 11
  username: lyf1
  password: xxxxxxx
  email: it-api@mail.xxxxx.com1

1.1 用在类上

/**
 * @Author lyf
 * @Date 2023/2/15 - 08:56
 * @Description
 **/
@Data
@Component("user1")
@ConfigurationProperties(prefix = "userinfo")
public class User {

    private int id ;
    private String username;
    private String password;
    private String email;
}

@ConfigurationProperties(prefix = “userinfo”) 意指将application.yml中前缀为userinfo的配置信息按照属性一一对应加载到User对象上

/**
 * @Author lyf
 * @Date 2023/2/15 - 09:20
 * @Description
 **/
@RestController
public class UserController {

    @Qualifier("user1")
    @Autowired
    private User user1;

    @GetMapping("/getUser1")
    public String getUser1(){
        return  user1.toString();
    }
}

启动项目后,请求localhost:8080/getUser1,成功将userinfo前缀中配置的信息输出
在这里插入图片描述

1.2 用在方法上

@Configuration
public class Demo1 {
    
    @Bean("user2")
    @ConfigurationProperties(prefix = "userinfo1")
    public User user(){
        return new User();
    }
}

@ConfigurationProperties(prefix = “userinfo1”) 结合配置类中@Bean方法来将配置文件中前缀为userinfo1的配置信息加载到User实例上。
这里可以看到仅仅通过new关键字实例一个User对象,并没有看到set 属性的操作,这是Spring框架帮助我们做了这一步,所以User类不能忽略 get set 方法,否则无法将配置信息设置到对应的类属性中。User类上@Data注解实现get set 方法

/**
 * @Author lyf
 * @Date 2023/2/15 - 09:20
 * @Description
 **/
@RestController
public class UserController {

    @Qualifier("user2")
    @Autowired
    private User user1;

    @GetMapping("/getUser2")
    public String getUser2(){
        return  user2.toString();
    }
}

启动项目后,请求localhost:8080/getUser2,成功将userinfo1前缀中配置的信息输出
在这里插入图片描述

2 @EnableConfigurationProperties

@EnableConfigurationProperties注解的主要作用是让@ConfigurationProperties注解生效。@Target(ElementType.TYPE) 意味着只能作用在类上。@EnableConfigurationProperties注解的主要用途是根据导入的配置类信息【使用】进一步构造需要Bean 信息,一般都搭配@Configuration+@Bean使用。
在这里插入图片描述

2.1 @EnableConfigurationProperties使用

/**
 * @Author lyf
 * @Date 2023/2/15 - 10:17
 * @Description
 **/
@Data
public class UUser {

    private int id ;
    private String username;
    private String password;
    private String email;
}

/**
 * @Author lyf
 * @Date 2023/2/15 - 09:29
 * @Description
 **/

@Configuration
@EnableConfigurationProperties(User.class)
public class Demo2 {

    private  User  user1;

    @Bean("user3")
    public UUser autoconfiguration(User user1){
        this.user1=user1;
        UUser  newUser=new UUser();
        newUser.setId(2);
        newUser.setUsername("XXXX");
        newUser.setEmail("XXXXX");
        newUser.setPassword("XXXXXX");
        return newUser;
    }
}

autoconfiguration方法依赖于User实例,尽管在autoconfiguration(User user1)方法中没有对参数赋值操作,@EnableConfigurationProperties(User.class) 告知当前配置类使用User类信息,所以在调用autoconfiguration方法时,会先从Spring IOC 容器中获取名称为user1的Bean。

/**
 * @Author lyf
 * @Date 2023/2/15 - 09:20
 * @Description
 **/
@RestController
public class UserController {

    @Qualifier("user3")
    @Autowired
    private UUser user1;

    @GetMapping("/getUser2")
    public String getUser3(){
        return  user3.toString();
    }
}

启动项目后,请求localhost:8080/getUser3,成功将构建UUser对象信息成功输出
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/347186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【零基础入门前端系列】—表单(七)

【零基础入门前端系列】—表单&#xff08;七&#xff09; 一、什么是表单 表单在Web网页中用来给访问者填写信息&#xff0c;从而采集客户信息端&#xff0c;使得网页具有交互功能。一般是将表单设计在一个HTML文档中&#xff0c;当用户填写完信息后做提交操作&#xff0c;于…

docker部署springboot项目

1、创建放置项目jar包和Dockerfile的文件夹 cd usr/ mkdir reggie cd reggie/ 2、上传Dockerfile和项目jar包 Dockerfile内容如下&#xff1a; # 基础镜像使用java FROM java:8 # 作者 MAINTAINER chenxiansheng # VOLUME 指定了临时文件目录为/tmp。 # 其效果是在主机 /v…

ElasticSearch与Kibana入门(解决报错:can not run elasticsearch as root)

ElasticSearch安装和部署 es官网 window版 选择你要的版本 解压&#xff0c;bin下bat就可以启动&#xff0c;需要配置jdk18的环境 linux版 解压&#xff1a;tar zxvf elasticsearch-6.3.2.tar.gz 启动&#xff1a;bin下执行/elasticsearch 报错org.elasticsearch.boot…

C语言初级指针应用

目录 一.什么是指针以及如何获取地址 二.间接运算符&#xff08;解引用运算符&#xff09;&#xff1a;* 三.声明指针 四.使用指针在函数进行通信 五.变量&#xff1a;名称&#xff0c;地址和值 一.什么是指针以及如何获取地址 指针是一个值为内存地址的变量&#xff08;或…

RabbitMQ相关概念介绍

这篇文章主要介绍RabbitMQ中几个重要的概念&#xff0c;对于初学者来说&#xff0c;概念性的东西可能比较难以理解&#xff0c;但是对于理解和使用RabbitMQ却必不可少&#xff0c;初学阶段&#xff0c;现在脑海里留有印象&#xff0c;随着后续更加深入的学习&#xff0c;就会很…

电源自动测试系统-电源模块批量自动化测试方案ATECLOUD-Power

1、测试名称 基于ATECLOUD的电源模块测试方案 2、测试目的 提升电源模块测试效率&#xff0c;减少测试人员成本&#xff0c;降低测试专业知识要求&#xff0c;增加数据精准度&#xff0c;为企业提供专业决策的数据支持&#xff0c;从而降本增效。 3、测试设备 示波器、电子…

20230215小结

1 t-sne 原理&#xff1a;利用两个向量之间的欧式距离转化成条件概率分布&#xff0c;可以把高维度的数据转化为低维度&#xff08;1000&#xff0c;64&#xff09;-》&#xff08;1000&#xff0c;2&#xff09;&#xff0c;原先每个样本有64维度&#xff0c;转化为2维 2 swi…

linux系统编程入门

一、搭建环境 1、安装 Linux 系统&#xff08;虚拟机安装、云服务器&#xff09; https://releases.ubuntu.com/bionic/ 2、安装 XSHELL、XFTP https://www.netsarang.com/zh/free-for-home-school/ 3、安装 visual studio code https://code.visualstudio.com/ 4、Linu…

Unreal Engine角色涌现行为开发教程

在本文中&#xff0c;我将讨论如何使用虚幻引擎、强化学习和免费的机器学习插件 MindMaker 在 AI 角色中生成涌现行为。 目的是感兴趣的读者可以使用它作为在他们自己的游戏项目或具体的 AI 角色中创建涌现行为的指南。 推荐&#xff1a;使用 NSDT场景设计器 快速搭建 3D场景。…

一种基于加密域的数字图像水印算法的设计与实现(附Matlab源码)

一种基于加密域的数字图像水印算法的设计与实现 项目介绍 毕设项目 题目&#xff1a;一种基于加密域的数字图像水印算法的设计与实现 随着数字媒体技术的发展&#xff0c;数字媒体版权的保护得到了越来越多人的重视&#xff0c;数字水印技术作为数字媒体版权保护的有效手段…

通达信交易接口以什么形式执行下单的?

通达信程交易接口 以API形式来执行下单接口&#xff0c;一般不再需要通过接口系统之间进行连接&#xff0c;通过直接调用通达信dll交易函数的方式直接进行交易&#xff0c;包括下单&#xff0c;撤单&#xff0c;查询资金股份、当日委托、当日成交等方面都能很快的执行出来。以a…

【JDK8】MyBatis源码导入Idea

1.背景 为了更好的将MyBatis的开发设计思想带到日常开发工作&#xff0c;将MyBatis源码导入到本地开发工具中(idea)。我自己在导入的时候碰到几个问题&#xff0c;耽误了自己一点时间&#xff0c;这里我把它们记下来&#xff0c;后边的小伙伴可不要踩我的坑。 Java版本&#x…

黑帽SEO是什么?做了真的能够一直保持排名?

随着Google演算法一次又一次的更新&#xff0c;现在愈来愈多人重视所谓的网站SEO。但是内行的人都知道&#xff0c;网站要提高排名并非一天两天的事&#xff0c;所以有些人就会使用不法手段想借此提高排名&#xff0c;这也就是常听到的「黑帽SEO」。但是做黑帽SEO真的能快速提高…

【爬虫+数据清洗+可视化分析】用Python分析哔哩哔哩“狂飙”的评论数据

一、背景介绍您好&#xff0c;我是马哥python说&#xff0c;一枚10年程序猿。2023开年这段时间&#xff0c;《狂飙》这部热播剧引发全民追剧&#xff0c;不仅全员演技在线&#xff0c;更是符合反黑主旋律&#xff0c;因此创下多个收视率记录&#xff01;基于此热门事件&#xf…

嵌入式开发之Vscode实用插件大全

嵌入式开发之Vscode实用插件大全① Chinese (Simplified) (简体中文) &#xff08;神器&#xff09;② C/C &CMake & C/C Extension Pack&#xff08;神器&#xff09;③ Better C Syntax④ Doxygen Documentation Generator&#xff08;神器&#xff09;⑤ vscode-ico…

存储类别、链接与内存管理(一)

1、一些必要的基础概念 &#xff08;1&#xff09;对象 从硬件的角度&#xff0c;被存储的每个值都被占用了一定的物理内存&#xff0c;C语言把这样的一块内存称为对象对象可以存储一个或多个值一个对象可能并未存储实际的值&#xff0c;也可能存储一个或多个值&#xff0c;但…

初阶函数递归经典例题(1)

1、递归实现n的k次方 2、计算一个数的每位之和&#xff08;递归实现&#xff09; 3、strlen的模拟&#xff08;递归实现&#xff09; 讲解之间我们先回顾下递归的知识点&#xff1a; 1、什么是递归&#xff1f; 程序调用自身的编程技巧称为递归。&#xff08;即一个函数在其…

蓝牙耳机什么牌子的好又实惠?实惠好用的蓝牙耳机品牌

随着科技的发展&#xff0c;耳机领域的新品是越来越多&#xff0c;很多品牌如雨后春笋般涌现&#xff0c;耳机的样式也是层出不穷&#xff0c;下面小编整理了几款实惠好用的蓝牙耳机品牌。 一、南卡小音舱蓝牙耳机 参考价格&#xff1a;239元 单耳重&#xff1a;3.1g 推荐系…

用ChatGPT写一个基于ChatGPT API的对话机器人

采用的是国区的网站 Q&#xff1a;写一个调用chatgpt的聊天机器人的python程序 A&#xff1a; python import requests# 聊天机器人的API地址 url https://api.chatgpt.com/v2/query# 请求参数 params {prompt: 你好,user_key: YOUR_USER_KEY }# 发送请求 response request…

数据仓库实战

目录1、最佳实战1.1 表的分类1.2 ETL策略1.3 任务调度2、项目实战2.1 项目概述2.2 数据描述2.3 架构设计2.4 环境搭建2.5 项目开发1、最佳实战 1.1 表的分类 维度建模中表的类型&#xff1a;事实表和维度表 事实表又可以分为&#xff1a;事务事实表、周期快照事实表、累积快照…