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 配置文件中的多个属性值】对比下写法
在这里插入图片描述

在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript的三大组成部分是什么?JavaScript的核心组成部分解析:语法、BOM和DOM

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

【uniapp】封装一个全局自定义的模态框

【需求描述】 在接口401处,需要实现全局提示并弹出自定义模态框的功能。考虑到uni-app内置的模态框和app原生提示框的自定义能力有限,我决定自行封装全局自定义的模态框,以此为应用程序提供更加统一且个性化的界面。 【效果图】 【封装】 主…

Python-OpenCV中的图像处理-几何变换

Python-OpenCV中的图像处理-几何变换 几何变换图像缩放图像平移图像旋转仿射变换透视变换 几何变换 对图像进行各种几个变换,例如移动,旋转,仿射变换等。 图像缩放 cv2.resize() cv2.INTER_AREAv2.INTER_CUBICv2.INTER_LINEAR res cv2.r…

MySQL面试1

Mysql的面试突击1 Mysql的体系结构是什么样子的(查询语句怎么进行执行的) mysql的架构:单进程多线程的架构模式 CLient -----> Server架构 Mysql的链接方式有没有性能优化的点 2个点 查询缓存(Query Cache) MySQL 内部自带了一个缓存模…

Direct path read LOB

Table full scan : wait event Direct path read because of LOB "Direct path read" Wait Event During LOB Access (Doc ID 2287482.1)​编辑To Bottom In this Document Symptoms Changes Cause Solution References APPLIES TO: Oracle Database …

数据结构--栈和队列

文章目录 栈的概念和结构栈的实现栈的数据结构栈的初始化和销毁出栈和入栈获取栈顶、大小,判空 队列的概念和结构队列的实现队列的数据结构队列的初始化和销毁队列的插入 队列的删除获取队头和队尾的数据获取队列长度和判空 栈和队列的一些题目1.有效的括号2.用队列…

教你连接本地树莓派

如何连接本地树莓派 文章目录 如何连接本地树莓派前言1. 操作流程2. 打开树莓派SSH功能3. 确认树莓派信息后 安装相应SSH客户端 前言 树莓派作为一款以教育为目的推出的硬件系统,也是超低功耗的微型“准系统”,能够提供基础的电脑应用体验。而得益于其极…

微信开发之获取标签详情的技术实现

简要描述: 获取标签列表 请求URL: http://域名地址/getContactLabelList 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选…

服务限流治理

一、基础概念 1.什么是服务限流? 限流在日常生活中也很常见,比如节假日你去一个旅游景点,为了不把景点撑爆,管理部门通常会在外面设置拦截,限制景点的进入人数(等有人出来之后,再放新的人进去…

为什么还有很多人不喜欢使用微信电话?让人感到困扰

尽管微信电话在技术上非常便利和实用,但仍然有很多人不太喜欢使用它。这引发了一个问题:为什么还有这么多人对微信电话感到困扰呢? 一、容易造成隐私泄露 在很多情况下,我们经常会收到好友的微信电话。然而,如果在这个…

(Python)Requests+Pytest+Allure接口自动化测试框架从0到1搭建

前言:本文主要介绍在企业使用Python搭建接口自动化测试框架,数据驱动读取excel表里的数据,和数据库方面的交互,包括关系型数据库Mysql和非关系型数据库MongDB,连接数据库,读取数据库中数据,最后…

MySQL事务:ACID特性实现原理

事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段。本文将首先介绍MySQL事务相关的基础概念,然后介绍事务的ACID特性,并分析其实现原理。 MySQL博大精深,文章疏漏之处在所难免,欢迎批评指…

Eudic欧路词典 for Mac v4.4.5增强版

欧路词典 (Eudic)是一个功能强大的英语学习工具,它包含了丰富的英语词汇、短语和例句,并提供了发音、例句朗读、单词笔记等功能。 多语种支持:欧路词典支持多种语言,包括英语、中文、日语、法语等等,用户可以方便地进…

【计算机网络】概述及数据链路层

每一层只依赖于下一层所提供的服务,使得各层之间相互独立、灵活性好,已于实现和维护,并能促进标准化工作。 应用层:通过应用进程间的交互完成特定的网络应用,HTTP、FTP、DNS,应用层交互的数据单元被称为报…

List和数组互转方法以及踩坑点

一、数组转List 1. 使用for循环逐个添加 String[] array {"A", "B", "C"}; List<String> list new ArrayList<>(); for (String element : array) {list.add(element); }2. 使用Arrays.asList(arr) String[] array {"A&q…

如何在群辉NAS系统下安装cpolar套件,并使用cpolar内网穿透?

如何在群辉NAS系统下安装cpolar套件,并使用cpolar内网穿透&#xff1f; 文章目录 如何在群辉NAS系统下安装cpolar套件,并使用cpolar内网穿透&#xff1f;前言1. 在群辉NAS系统下安装cpolar套件2. 管理隧道列表3. 创建固定数据隧道 前言 群晖作为大容量存储系统&#xff0c;既可…

数字万用表测量基础知识--使用DMM测量电阻

概览 DMM&#xff08;即数字万用表&#xff09;是一种电气测试和测量仪器&#xff0c;可测量直流和交流信号的电压、电流和电阻。本文介绍如何正确使用和理解数字万用表(DMM)。 使用DMM测量电阻 电阻测量通常用于测量电阻器或其他组件的电阻&#xff0c;如传感器或扬声器。电…

全开源跨境电商一键铺货货源平台--后台数据采集功能

数据库设计在设计数据库时&#xff0c;需要考虑到以下信息&#xff1a; 货源信息&#xff1a;包括货源标题、价格、描述、图片等信息。 用户信息&#xff1a;包括用户名、密码、邮箱、电话等信息。 订单信息&#xff1a;包括订单号、用户信息、货源信息、支付信息等。 支付信息…

【白猫】图片转文字在线-图片文字提取

图片转文字 - 图片转Excel表格 - PDF转Word - 白描网页版白描&#xff0c;高效准确的中文ocr文字识别软件与文件扫描软件&#xff0c;支持简体、繁体、英文、韩语、日语、俄语等多国语言的准确识别&#xff0c;高清晰的文件扫描合成PDF,好用的手机扫描仪&#xff0c;可以表格识…

知识图谱推荐系统研究综述

基于协同过滤的推荐是当前应用最为广泛的推荐方法,但也存在着新用户或新项目的冷启动以及数据稀疏等问题。针对上述两种方法出现的问题,研究者进一步提出了混合推荐系统。混合推荐系统结合上述两种方法的优点,可以有效缓解其中的不足,增加推荐的准确性。但是,混合推荐系统…