目录
自定义bean的绑定
第三方bean的绑定
@EnableConfigurationProperties:
松散绑定
bean属性校验
我们先新建一个SpringBoot项目
自定义bean的绑定@Component
@Data
public class ServerConfig {
private String ipAddress;
private int port;
private long timeout;
}
先来随便定义一个类,随便写三个成员变量,加上@Data注解替我们生成get set等方法(当然,要提前导入lombok的坐标),然后,再加上一个@Component注解,让这个类被定义为一个受Spring管控的bean。这样,自定义的bean就完成了
然后,我们就来到配置文件中为这个bean配置上值。为了避免与SpringBoot中的端口配置相冲突,这里改成servers,我们随机为这个自定义的bean配置一些值
servers:
ipAddress: 192.168.0.1
port: 88
timeout: 123
那我们如何将这些配置的值和bean绑定起来呢?
首先,在pom文件中加入一个依赖坐标
org.springframework.boot
spring-boot-configuration-processor
然后,我们要为bean加一个@ConfigurationProperties的注解,并将perfix的值赋值为配置值的上一级,也就是”servers“
@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
private String ipAddress;
private int port;
private long timeout;
}
接下来,在控制台上输出这个bean,看一下有没有为其配置上值,要打印这个bean,我们要先对Application类做一个修改
@SpringBootApplication
public class Springboot08ConfigurationApplication {
public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(Springboot08ConfigurationApplication.class, args);
ServerConfig bean = ctx.getBean(ServerConfig.class);
System.out.println(bean);
}
}
这样就可以输出查看bean了
自定义bean加载成功
第三方bean的绑定首先要导入一个第三方bean的依赖坐标,这里选择德鲁伊,这里选择德鲁伊只是用来做示例,而且德鲁伊是可以往bean中set一些值的,实际应用时还有更多的第三方bean可供使用
com.alibaba
druid
1.1.6
我们通过这样的方式拿到bean
@SpringBootApplication
public class Springboot08ConfigurationApplication {
@Bean
public DruidDataSource druidDataSource(){
DruidDataSource ds = new DruidDataSource();
return ds;
}
public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(Springboot08ConfigurationApplication.class, args);
ServerConfig bean = ctx.getBean(ServerConfig.class);
System.out.println(bean);
DruidDataSource ds = ctx.getBean(DruidDataSource.class);
System.out.println(ds.getDriverClassName());
}
}
在控制台上输出了一些字符串。这些字符串显示的是一些数据源连接池的一些初始化的配置值。
接下来我们通过yml配置文件,为这个bean注入一些值
servers:
ipAddress: 192.168.0.1
port: 88
timeout: 123
datasource:
driverClassName: com.mysql.jdbc.Driver
跟自定义的bean一样,我们还要再添加一个注解
@Bean
@ConfigurationProperties(prefix = "datasource")
public DruidDataSource druidDataSource(){
DruidDataSource ds = new DruidDataSource();
return ds;
}
运行后成功拿到了我们配置的值
@EnableConfigurationProperties:@EnableConfigurationProperties(xxx.class)这个注解的后面是必须要跟一个类名的,它的作用是开启属性绑定,并设置相应的对象是谁。后面的类名可以用大括号包含起来的,大括号内可以有多个类名{xxx1.class,xxx2.class,xxx3.class……},只有一个类名时,大括号可以省略。因为@EnableConfigurationProperties(xxx.class)有设置相应对象是谁的功能,所以在后面的类上就不可以加@Component的注解,这样会导致出现两个相同的bean,spring就会报错。
松散绑定springboot为了兼容多种开发者的不同命名习惯,在绑定时可以兼容不同的命名规范,以下命名也是可以被识别并绑定成功的。
servers:
ip_address: 192.168.0.1
PORT: 88
time-out: 123
datasource:
dr_i_vErClassName: com.mysql.jdbc.Driver
那么springboot是如何做到这一点的呢。
SpringBoot在读取配置时会忽略掉标识符中的所有下划线" _ "和中划线" - ",并将所有的字母转为大写,并将bean中的标识符也转为大写字母,再把他们匹配起来,达到兼容多种命名规范的目的。
SpringBoot中推荐的命名方式是使用“烤肉串”的方式进行命名,也就是使用“ - ”,我们可以将上面的配置文件全部改为烤肉串的命名方式。
servers:
ip-address: 192.168.0.1
port: 88
time-out: 123
data-source:
driver-class-name: com.mysql.jdbc.Driver
当然,在程序中也要对应使用烤肉串的命名方式,当然,不使用也可,因为springboot在读取时会忽略 - ,但是在程序中这里是不允许出现大写的,这样的话就会报错。
bean属性校验为了避免在配置属性值时出错,我们可以加入bean属性的校验。开启数据校验有助于提高系统的安全性。J2EE规范中JSR303规范定义了一组有关数据校验相关的API
我们首先把这套规范的API依赖坐标导入到项目中
javax.validation
validation-api
这时候接口我们有了,但没有实现类,所有我们还要导入一个坐标,作为实现类。这是hibernate框架提供的校验器做实现类
org.hibernate.validator
hibernate-validator
然后在需要校验的bean上加@Validated注解,然后就可以开始编写规则
@Component
@Data
@ConfigurationProperties(prefix = "servers")
@Validated
//开启对当前bean的属性注入的校验
public class ServerConfig {
private String ipAddress;
@Max(value = 888,message = "最大值不能超过888")
@Min(value = 100,message = "最小值不能超过100")
private int port;
private long timeout;
}
我们现在让port的值为999
控制台就显示报错了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)