一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第27天,点击查看活动详情。
一、属性注入
1-1、配置文件值注入
1-1-1、将YAML映射到属性
1-1-1-1、使用K:V的方式注入
1-1-1-1-1、application.yml配置
1-1-1-1-2、创建beans,通过@Value使用配置文件属性值
1-1-1-1-3、测试执行
将user对象注入到测试类中,然后进行输出可以看到,通过@Value映射的值已经成功注入
1-1-1-2、使用@ConfigurationProperties的方式注入数据
在bean上使用@ConfigurationProperties,并且设置前缀就可以引入yml中的数据。bean中的属性和yml中的属性名称绑定,不区分大小写,并且可以使用“-”,“_”都可以进行映射,如user_name/user-name/userName/UserName/USERNAME
1-1-1-2-1、添加注解@ConfigurationProperties,并测试
如下给注解添加prefix并设置为user,这样就可以去yml中找到前缀是user的配置信息,将其对应的属性映射到bean的属性上面。
1-1-1-2-2、数据校验
通过给bean添加@ConfigurationProperties,然后再添加@Validation就可以使用JSR303校验了
1-1-1-2-2-1、引入validation start
<!--数据校验-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
1-1-1-2-2-2、给bean添加@Validation注解,并且给需要校验的属性添加对应注解
测试结果如下:
1-1-1-3、引入外部配置文件属性注入
1-1-1-3-1、使用@PropertySource注解引入配置文件
1-1-1-3-2、user.properties配置文件
user.user-name= ${random.uuid}
user.age=${random.int[1,100]}
user.birthday= 2020/01/01
user.hobbies= 唱歌,跳舞
user.girl-friend.18= 范冰冰
user.girl-friend.20= 迪丽热巴
user.address.id=1
user.address.desc=${user.user-name}的家在北京
需要注意的是使用properties使用:
数组为:
user.hobbies= 唱歌,跳舞
map为:
user.girl-friend.18= 范冰冰
user.girl-friend.20= 迪丽热巴
bean对象为:
user.address.id=1
user.address.desc=${user.user-name}的家在北京
1-1-2、@Value获取值和@ConfigurationProperties获取值比较
| @ConfigurationProperties | @Value | |
|---|---|---|
| 绑定 | 批量注入配置文件中的属性 | 一个个指定 |
| 松散绑定(松散语法) | 支持 | 支持有限 |
| SpEL | 不支持 | 支持 |
| 自动提示 | 支持 | 不支持 |
配置文件yml还是properties他们都能获取到值;
1-1-2-1、自动提示的支持
1-1-2-1-1、添加依赖
<!--会生成MET-INF元数据 用于提供idea自动提示配置文件的-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.6.6</version>
<!--依赖不会传播,如果有其他moudle引用本moudle,此依赖不会被传播到其他moudle-->
<optional>true</optional>
</dependency>
1-1-2-1-2、修改idea注解配置
1-1-2-1-3、编译代码
配置以上信息之后,编译代码就会在target中生成元数据信息
1-1-2-1-4、查看效果
在输入bir的时候,就会进行自动提示相关匹配的属性了,这样是不是很方便了。
1-1-2-2、使用场景
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
1-1-3、yml配置文件支持的相关类型
上面通过@Value和@ConfigurationProperties演示了字符串和数字,下面来看下其他数据类型,如有控制台输出有中文乱码,可以进行如下设置
1-2-3-1、Date日期格式
1-2-3-4、List、Set格式
1-2-3-4-1、用- 值表示数组中的一个元素
1-2-3-4-2、行内写法
1-2-3-5、Map格式
以下两种写法,0/1代表key,后面的值代表value,key:后面一定要加空格
1-2-3-5-1、折行写法
1-2-3-5-2、行内写法
1-2-3-4、引用对象
如果引用的是对象,需要注意要使用被引用bean的属性,然后对应相关值
1-1-4、yml支持的占位符(不支持表达式)
1-1-4-1、属性占位符的使用
这个地方需要注意的是只支持属性的引用,不支持SPEL表达式如:${1*3}
1-1-4-1、随机数
${random.value}--获取随机字符串
${random.int} --获取随机数字
${random.long} --获取随机long类型数字
${random.int(10)}--获取10以内的随机数
${random.uuid} --随机获得uuid值
${random.int[1024,65536]}--获取1024-65536之间的随机数