第三方bean属性的绑定
先写一个实体类
我们在配置yml文件里写了属性值 能一一对应
我们用注解让其对应
我们在启动类里面测试
我们首先拿到容器对象
再拿到bean 打印bean 发现我们的容器获取到的bean bean的属性与配置里面的属性一一对应
这时候提出一个问题
这是我们自定义的bean
假如我们的bean不是自定义的 而是第三方bean加载的我们该如何去操作呢
我们引入druid的依赖
重新书写
实际效果
我们现在有数据
我们要将其注入到第三方对象datasource上
我们该如何注入呢
我们同样可以用这个注解注入配置
小结
有的注解前面有一个unable
启动起来会报错
不唯一的bean定义
原因是之前那个Component主机又定义其为一个bean
这样就有冲突
我们要做的就是把之前那个定义给注释掉
总结总结
提示 processer 未进行配置
松散绑定
对于我们使用注解的时候
绑定属性的时候 我们对名称的要求其实是非常低的
照样能读取出来
这些都可以
我们发现定义在yml里面格式匹配
是随便写
我们的主流书写模式是这样的
规范的模式使用
写在测试类里面
junit
控制台展示出来了结果
注意事项
boot主要推荐我们用@ConfigurationProperties绑定属性支持属性名的松散绑定
prefix 里面的属性名全是小写和中划线
常用计量单位的应用
这里有具体的数据逻辑
但是如果数值过大
100000000000000000000就不便于读取
也不知道单位
在jdk8之后 出现了很多与时间相关的属性
定义时间
package com.example.demo.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.time.Duration;
//装配为spring的bean
@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
private String ipAddress;
private int port;
private long timeout;
// 服务器超时时间
private Duration serverTimeOut;
}
这边输出就是秒
用注解自定义时间的格式类型
SpringBoot支持JDK8提供的时间与空间计量的单位
package com.example.demo.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.convert.DataSizeUnit;
import org.springframework.boot.convert.DurationUnit;
import org.springframework.stereotype.Component;
import org.springframework.util.unit.DataSize;
import org.springframework.util.unit.DataUnit;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
//装配为spring的bean
@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
private String ipAddress;
private int port;
private long timeout;
@DurationUnit(ChronoUnit.HOURS)
// 服务器超时时间
private Duration serverTimeOut;
@DataSizeUnit(DataUnit.MEGABYTES)
// 文件存储的单位 MB
private DataSize dataSize;
}
小结
计量单位
bean属性校验
当我们配置bean的时候
会有一个属性配置错误
配置错误也找不出来
如果我们有一个校验就好了
开启数据校验有助于系统的安全性
J2EE规范中的JSR303规范定义了一组有关数据校验相关的API
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
在xml文件里引入坐标
这个东西相当于JDBC技术
JDBC是接口
不是实现类
实现类仅仅是Mysql的驱动
我们写了一堆接口 jdbc是一套规范
Mysql才是实现类
jdbc是一套规范
引入依赖后我们可以开启对当前bean的属性注入校验
校验注解
@Validated
但是我们还没有对指定的字段进行校验
用Validated提供的注解
增加校验规则
但是这样我们只是书写了接口
没有书写实现类
我们还要加一个Hibernate的校验器
我们首先要引入依赖
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>8.0.1.Final</version>
</dependency>
使用hibernate提供的校验器做实现类
<!--导入JSR303规范-->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<!--使用hibernate框架提供的校验器做实现类-->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>8.0.1.Final</version>
</dependency>
控制台就会打印信息
小结
小结
进制数据转换的规则
注入配置文件
yaml的语法规则
以后我们在做程序的时候
输入的密码被识别成八进制数 转化为10进制
我们推荐的是 纯字符串就用字符串
""引号 包裹