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 配置文件中的多个属性值】对比下写法
21、springboot的宽松绑定及属性处理类的构造注入_第1张图片

在这里插入图片描述

21、springboot的宽松绑定及属性处理类的构造注入_第2张图片
结果:
21、springboot的宽松绑定及属性处理类的构造注入_第3张图片

你可能感兴趣的:(springboot,spring,boot,后端,java)