@ConfigurationProperties

news2024/11/24 19:34:34

目录

@ConfigurationProperties

自定义bean使用注入

 第三方bean注入

@EnableConfigurationProperties


@ConfigurationProperties

当想需要获取到配置文件数据时,除了可以用 Spring 自带的 @Value 注解外,SpringBoot 还提供了一种更加方便的方式:@ConfigurationProperties。 此注解的作用是用来为bean绑定属性的。开发者可以在yml配置文件中以对象的格式添加若干属性

自定义bean使用注入

在application.yml中 配置

servers:
  ip-address: 192.168.0.1 
  port: 2345
  timeout: -1

然后再开发一个用来封装数据的实体类,注意要提供属性对应的setter方法

@Component
@Data
public class ServerConfig {
    private String ipAddress;
    private int port;
    private long timeout;
}

 使用@ConfigurationProperties注解就可以将配置中的属性值关联到开发的模型类上

@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
    private String ipAddress;
    private int port;
    private long timeout;
}

 我们可以在启动类中测试一波

@SpringBootApplication
public class SsmpApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(SsmpApplication.class, args);
        ServerConfig bean = applicationContext.getBean(ServerConfig.class);
        System.out.println(bean);
    }

}

测试结果如下:

 第三方bean注入

@ConfigurationProperties注解是写在类定义的上方,而第三方开发的bean源代码不是你自己书写的,也不可能到源代码中去添加@ConfigurationProperties注解,这种问题该怎么解决呢?下面就来说说这个问题。

使用@ConfigurationProperties注解其实可以为第三方bean加载属性,格式特殊一点而已。

步骤①:使用@Bean注解定义第三方bean

@Bean
public DruidDataSource datasource(){
    DruidDataSource ds = new DruidDataSource();
    return ds;
}

步骤②:在yml中定义要绑定的属性,注意datasource此时全小写

datasource:
  driverClassName: com.mysql.cj.jdbc.Driver

步骤③:使用@ConfigurationProperties注解为第三方bean进行属性绑定,注意前缀是全小写的datasource

@Bean
@ConfigurationProperties(prefix = "datasource")
public DruidDataSource datasource(){
    DruidDataSource ds = new DruidDataSource();
    return ds;
}

 @ConfigurationProperties注解不仅能添加到类上,还可以添加到方法上,添加到类上是为spring容器管理的当前类的对象绑定属性,添加到方法上是为spring容器管理的当前方法的返回值对象绑定属性,其实本质上都一样。

@EnableConfigurationProperties

我们定义bean不是通过类注解定义就是通过@Bean定义,使用@ConfigurationProperties注解可以为bean进行属性绑定,那在一个业务系统中,哪些bean通过注解@ConfigurationProperties去绑定属性了 了呢? 因为这个注解不仅可以写在类上,还可以写在方法上,所以找起来就比较麻烦了。为了解决这个问题方便统一直观的看到,spring给我们提供了一个全新的注解,专门标注使用@EnableConfigurationProperties

步骤①:在配置类上开启@EnableConfigurationProperties注解,并标注要使用@ConfigurationProperties注解绑定属性的类

@SpringBootApplication
@EnableConfigurationProperties(ServerConfig.class)
public class SsmpApplication {
}

 步骤②:在对应的类上直接使用@ConfigurationProperties进行属性绑定

@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
    private String ipAddress;
    private int port;
    private long timeout;
}

这里需要注意在 ServerConfig 这个类中就不用标@Component注解,@EnableConfigurationProperties会自己加载这个bean了否则就会出现

 现在绑定属性的ServerConfig类并没有声明@Component注解。当使用@EnableConfigurationProperties注解时,spring会默认将其标注的类定义为bean,因此无需再次声明@Component注解了。

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

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

相关文章

零基础C#编写上位机如何入门?

学习C#基础语法和.NET框架,掌握基本编程概念和语法,例如数据类型、类、对象、继承、多态、异常处理等。学习WinForm窗体应用程序开发技术,掌握窗体应用程序的设计和开发,例如控件的使用、事件驱动编程、窗体的布局与设计等。学习数…

结构重参数化详解。(bn+conv)与(conv+bn)的融合

结构重参数化详解。(bnconv)与(convbn)的融合 原理哪种情况不能合并?带bn的合并结构(conv bn)(bn conv)需要注意:pytorch代码 原理 如何理解结构重参数化&…

低代码是什么意思?

低代码是什么意思? 简单而言,低代码(Low-code)是一种软件开发和应用开发方法论,旨在帮助开发人员快速构建应用软件,同时减少繁琐的手动编码工作。该方法论注重简化开发流程,通过可视化建模和少…

【eNSP】Telnet远程登录

Telnet远程登录 eNSP软件TelnetTelnet远程登录-路由连接关闭防火墙eNSP根据图1画图路线配置路由端口IP配置路由R1改名配置接口IP 配置路由R2 配置R2的远程登录设置登录用户授权级别退出登录超时时间 Telnet测试 eNSP软件 eNSP(Enterprise Network Simulation Platform)是一款由…

RocketMQ 5.x延时消息源码分析(不包含时间轮)

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党 RocketMQ版本 5.1.0 背景 首先说明本次源码分析仅分析时间轮之前的延时消息设计 现在的RocketMQ已经支持基于时间轮的任意级别延时消息 延时消息基础知识 默认…

2023财务ERP-业财一体化ERP系统功能应用,实现河北企业报表专业管理|亿发

信息技术迅速发展,传统的人工管理会导致财务与业务数据割裂,繁琐的数据处理和低效的财务管理已经不能满足河北省企业的发展需要,需要通过智能化手段持续推动河北企业的组织和管理变革。而在数字化时代,业财一体化建设与应用正逐渐…

PySpark-RDD编程入门

文章目录 2.PySpark——RDD编程入门2.1 程序执行入口SparkContext对象2.2 RDD的创建2.2.1 并行化创建2.2.2 获取RDD分区数2.2.3 读取文件创建 2.3 RDD算子2.4 常用Transformation算子2.4.1 map算子2.4.2 flatMap算子2.4.3 reduceByKey算子2.4.4 WordCount回顾2.4.5 groupBy算子…

Connection is read-only. Queries leading to data modification are not allowe解决

场景:用动态代理类调用本类中的事务方法后,又调用其他service的方法时,会抛此异常 解决方法:事务注解放在本类方法上,让处于同一事务下即可 初步认为是动态代理类影响了事务aop。

vsphere之vmotion精华 虚拟机迁移

概念 vmotion是vsphere高级功能的基础,DRS、HA、FT等功能都依赖于vmotion。简单来说,vmotion指虚拟机漂移。比如有一台VM原来在exsi1上运行,我们可以通过vmotion技术把VM移动到exsi2上。 那为什么要用到vmotion呢?显而易见&…

隔断玻璃内部的雕花工艺有哪些特点

隔断玻璃内部的雕花工艺具有以下几个特点: 1. 精细细腻:隔断玻璃内部的雕花工艺通常需要经过精细的雕刻和打磨,以展现出细腻的纹理和图案。因此,这种工艺在细节上非常令人印象深刻。 2. 独特个性:隔断玻璃内部的雕花工…

华中科技大学成功验证LK-99,美国实验室证实常温常压超导理论可行!

原创 | 文 BFT机器人 上周,全球物理学界迎来了一则令人震惊的消息:一支韩国科学家团队宣布他们发现了全球首个室温超导材料。这种材料被称为“改性铅磷灰石晶体结构(下称LK-99,一种掺杂铜的铅磷灰石)”。这项研究引起…

炒股杠杆途乐证券;股票买入卖出时间规则?

股票买入卖出时刻规则是指出资者在股票商场上进行生意交易时需求遵循的一系列时刻规定。正确的买入和卖出时刻能够协助出资者最大化出资回报,一起降低风险。但是,在股票商场上,生意时刻的挑选是一个复杂的问题,需求从多个角度剖析…

angr学习-入门篇

前言: 资源链接:GitHub - jakespringer/angr_ctf(题库仓库,里面有个讲解angr的PPT,里面有官方的题解很详细) GitHub - Hustcw/Angr_Tutorial_For_CTF: angr tutorial for ctf 安装: 关于angr…

JAVA学习(十)

1. 线程上下文切换 巧妙地利用了时间片轮转的方式, CPU 给每个任务都服务一定的时间,然后把当前任务的状态保存 下来,在加载下一任务的状态后,继续服务下一任务,任务的状态保存及再加载, 这段过程就叫做 上下文切换。时间片轮转的…

【Linux】线程同步 -- 条件变量 | 生产者消费者模型 | 自旋锁 |读写锁

初识生产者消费者模型同步条件变量初步使用 POSIX信号量其他常见的各种锁自旋锁读写锁 初识生产者消费者模型 举一个例子: 学生去超市消费的时候,与厂家生产的时候,两者互不相冲突。 生产的过程与消费的过程 – 解耦 临时的保存产品的场所(…

APP外包开发的android开发框架

Android的开发框架有很多,每个框架的特点不同,选择哪种框架取决于特定的开发需求和项目目标。今天和大家分享这方面的知识,以下是一些比较常见且重要的开发框架及其特点,希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c…

【JavaEE】深入了解Spring中Bean的可见范围(作用域)以及前世今生(生命周期)

【JavaEE】Spring的开发要点总结(4) 文章目录 【JavaEE】Spring的开发要点总结(4)1. Bean的作用域1.1 一个例子感受作用域的存在1.2 通过例子说明作用域的定义1.3 六种不同的作用域1.3.1 singleton单例模式(默认作用域…

Shell脚本学习-应用启动脚本

利用系统函数模拟实现应用脚本启动的特殊颜色效果: /server/scripts/start_nginx.sh {start|stop|restart},用if语句实现。 [rootvm1 scripts]# cat start_nginx.sh #!/bin/bash. /etc/init.d/functionsUSAGE(){echo "USAGE: $0 {start|stop|resta…

DBeaver开源数据库管理工具发布23.1.3版本

导读DBeaver开源数据库管理软件近日发布了v23.1.3版本,该版本在空间数据查看器、数据传输、数据编辑器等多个模块进行了优化,提升了软件的可用性和兼容性。 具体来看,空间数据查看器新增了地图对象标记和曲线渲染支持,也实现了坐标复制等功能。数据传输模块增强了XLSX文件导入和…