@PropertySource
实体类
@Component
@ConfigurationProperties(prefix = "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;
//get..
//set..
yaml
person:
last-name: "Ly"
age: 18
boss: false
birth: 2017/12/12
maps: {k1: v1,k2: 12}
lists:
- lisi
- zhaoliu
dog:
name: 小狗
age: 12
pom
<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
测试
@RestController
public class TestController {
@Autowired
private Person person;
@RequestMapping("/show")
public Person show(){
return person;
}
}
@Value
@Component
public class Person {
@Value("${person.last-name}")
private String lastName;
@Value("${person.age}")
private Integer age;
@Value("${person.boss}")
private Boolean boss;
@Value("${person.birth}")
private Date birth;
private Map<String, Object> maps;
private List<Object> lists;
private Dog dog;
}
注意:他们都需要加如到spring容易中,原本就是xml的bean的value属性
不同点:
注意使用@value不用写get和set方法
只支持普通类型的赋值
复杂类型并不能完成赋值
@value注解就等同于下面的在xml中配置<bean>中的value属性
@value注解也支持这么多种赋值方式
必须要给使用注解@value()的类配置到spring容器中,就相当于一个<bean>
<bean class="Person">
<property name ="lastName" value="字面量/${key}从环境变量配置文件中获取值/#{SpEL}">
</bean>
他们的区别如下
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验@Validated | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
松散绑定(松散语法):配置文件可以是: last-name 实体类为lastName也可以成功匹配
SpEL :${}
JSR303数据校验:@Email
复杂类型封装:比如集合,对象等
@ConfigurationProperties和@Value的选用
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
@PropertySource
@PropertySource:加载指定的配置文件;
上面的@ConfigurationProperties默认会从全局配置文件(application)中获取值
我们不能什么都放在全局配置文件中
我们就可以把上面配置person:的内容抽出来单独用个person.yam配置文件来配置
于是就变成了这样:
@Component
@ConfigurationProperties(prefix = "person")
@PropertySource(value = {"classpath:person.yam"})
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..
ok,简单明了的结束本编博客,希望看明白的可以点个赞,或者转发一下噢