当前位置: 首页 > news >正文

21、springboot的宽松绑定及属性处理类的构造注入

springboot的宽松绑定及属性处理类的构造注入

★ 如何使用属性处理类所读取的属性

属性处理类最终变成了Spring容器中的一个Bean组件,因此接下来Spring即可将该Bean组件注入任意其他组件。
这种做法的好处是:可以将大量的配置信息封装一个对象——所以这种方式被称为“类型安全的绑定”。

★ 宽松绑定

不要配置属性名与属性处理类的属性名完全相同。

▲ 比如有如下类:

@ConfigurationProperties(prefix="org.crazyit")
public class FkConfig
{private String remoteAddress; // Java类中的属性名总是驼峰写法
}

▲ 配置文件中,写成如下几种形式:

1. 最主流,Spring boot推荐写法:烤串写法:  org.ljh.remote-address; 2. 驼峰写法,Spring boot也支持驼峰写法:  org.ljh.remoteAddress;3. 下划线写法:可选。org.ljh.remote_address;4. 全部大写的写法:(原有的点号换成下划线,属性名的单词之间无需任何分隔符。只用于通过环境变量配置属性时才使用这种写法。ORG_LJH_REMOTEADDRESS

★ 配置List(数组)

▲ 在*.properties文件中配置List有两种方式:- 简单地使用英文逗号隔开的多个值,每个值代表一个List元素(如前一个例子所示)- 用标准的方括号语法来配置List。▲ 在*.yml文件中配置List也有两种方式:- 以中划线开头来配置List列表项,- 或简单地使用英文逗号隔开的多个值。不管是属性文件,还是*.yml文件,都可用英文逗号隔开的多个值来配置List。

★ 属性处理类(@ConfigurationProperties修饰的类)使用构造器来注入

▲ 两个要求:1. 使用@ConstructorBinding修饰要执行构造器注入的构造器。如果该类仅有一个构造器,可直接用@ConstructorBinding修饰该类即可。——由于该类仅有一个构造器,因此用@ConstructorBinding修饰该类就相当于修饰了唯一的构造器。2. 只能使用@EnableConfigurationProperties或@ConfigurationPropertiesScan来启用属性处理类。备注:在这种情况下,不能使用将属性处理类配置成容器中的Bean的形式来启用它。

代码演示:

演示如何通过构造器注入的方式,一次性读取yml配置文件中的多个属性值

解释:
1、使用 @ConstructorBinding 注解 修饰 (要执行构造器注入操作)的构造器;
用 @ConstructorBinding 这个注解就不能用 @Component 来启动 @ConfigurationProperties 注解了
2、修改yml配置的名称,这里我是随便写的,主要是为了体现上面说的宽松绑定(就是驼峰写法,烤串写法之类的)
3、这里只用 getter 方法,不用 setter 方法,因为返回的任何java对象,默认是由Jackson负责将它转换为JSON字符串,因此Jackson默认根据getter方法进行转换
4、然后用@ConfigurationPropertiesScan(“cn.ljh.boot.config”)注解,让springboot去扫描config这个包及其子包下面的处理类

这个构造器注入,和这篇 【使用@ConfigurationProperties注解一次性拿到application.yml 配置文件中的多个属性值】对比下写法
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
结果:
在这里插入图片描述

http://www.lryc.cn/news/116404.html

相关文章:

  • nginx负载均衡(反向代理)
  • AWS上传私有windows server2019镜像64位
  • 查看当前仓库对应的远程仓库地址
  • flask-script
  • 标准的OSI七层模型(其实了解tcp足矣)
  • 【C++】初识模板
  • 学习Pull request
  • python爬虫实战(1)--爬取新闻数据
  • React Hooks 详细使用介绍
  • python版《羊了个羊》游戏开发第一天
  • 【uniapp】原生子窗体subNvue的使用与踩坑
  • 浅析 C 语言的共用体、枚举和位域
  • TartanVO: A Generalizable Learning-based VO 论文阅读
  • 单例模式-java实现
  • 篇八:装饰器模式:动态增加功能
  • 算法通关村第五关——n数之和问题解析
  • 小白到运维工程师自学之路 第七十集 (Kubernetes集群部署)
  • docker 部署mysql 5.6集群
  • mysql基本信息查询
  • C语言初学者必读:使用for循环将数字从大到小排序并输出
  • 【Vue+Element-plus】记录后台首页多echart图静态页面
  • BM5 合并k个已排序的链表 javascript
  • 1.利用matlab建立符号表达式(matlab程序)
  • LVS工作环境配置
  • 金蝶,「起舞」在大模型时代
  • 解决Vs Code工具开发时 保存React文件时出现乱码情况
  • Fastjson 使用指南
  • 阿里云内容审核服务使用(图片审核)
  • git撤回最近一次push操作
  • 2000-2022年上市公司环境不确定性(原始数据+测算代码+测算结果)