总目录:SpringBoot学习教程
(一)@ConfigurationProperties注解
回顾上一节代码:
/**
* 将配置文件中配置的每一个属性的值,映射到这个组件中
* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
* prefix = "person":配置文件中哪个下面的所有属性进行一一映射
*
* 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
*
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}
在上一节中我们使用@ConfigurationProperties(prefix = "person")这种方式,从配置文件中获取值。
同时@Component把Person注册的容器中。
这次我们使用@Value注解获取值:
package com.example.springboot02.bean;
@Component
//把下面的注解注释掉
//@ConfigurationProperties(prefix = "person")
public class Person {
/**
* 以前我们用这种方式
* <bean class="Person">
* <property name="lastName" value="字面量/${key}从环境变量、
* 配置文件中获取值/#{SpEL}">
* </property>
* <bean/>
*/
@Value("${person.last-name}")
private String lastName;
@Value("#{11*2}")
private Integer age;
@Value("true")
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
//此处省略get set toString方法 自行补全
}
最终我们发现这种方式也行,但是相对于(@ConfigurationProperties注解) 下面的就比较麻烦了,
(二)、@Value获取值和@ConfigurationProperties 获取值比较
@ConfigurationProperties | @Value | |
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 @Value("#{11*2}") |
JSR303校验 | 支持(@Validated) | 不支持 |
复杂类型封装(Map) | 支持 | 不支持(获取不到) |
JSR303校验:
package com.example.springboot02.bean;
@Component
@ConfigurationProperties(prefix = "person")
@Validated //JSR303校验
public class Person {
@Email
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
//自行补全get set
}
什么情况下使用这个二个:
配置文件yml还是properties他们都能获取到值;
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
参考资料:尚硅谷
下一节:第五章:SpringBoot配置——(加载指定文件和ioc容器注册)