SpringBoot配置文件属性值的注入,两个注解@ConfigurationProperties和@Value的区别
@ConfigurationProperties
@ConfigurationProperties注解用来快速、方便地将配置文件中的自定义属性值批量注入到某个Bean对象的多个对应属性中。并且是以set方式注入(所以需要set方法,并且set方法命名要规范)
@Component
//将配置文件中所有以person开头的配置信息注入当前类中
//前提1:必须保证配置文件中person.xx与当前Person类的属性名一致
//前提2:必须保证当前Person中的属性都具有set方法 @ConfigurationProperties(prefix = "person")
@Getter //lombok工具 直接生成get方法(set就不生了)
public class Person {
private int id; //id
private String name; //名称
private List hobby; //爱好
private String[] family; //家庭成员
private Map map;
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setHobby(List hobby) {
this.hobby = hobby;
}
public void setFamily(String[] family) {
this.family = family;
}
public void setMap(Map map) {
this.map = map;
}
}
application.yml (SpringBoot配置文件)
#对实体类对象Person进行属性配置
person:
id: 1
name: 王二麻子
family:
- 妻
- 妾
hobby:
- play
- read
- sleep
map:
k1: value1
k2: value2
@Value
@Value注解是Spring框架提供的,用来读取配置文件中的属性值并逐个注入到Bean对象的对应属性中,Spring Boot框架从Spring框架中对@Value注解进行了默认继承,所以在Spring Boot框架中还可以使用该注解读取和注入配置文件属性值。但是,@Value不仅会将配置文件中的属性注入到Bean对象中,还会将这个属性直接赋值给对应的属性,这点是@ConfigurationProperties不支持的,并且由于不是依赖于set方法进行注入,所以也不需要提供set方法
@Component
public class Student {
@Value("${person.id}")
private int id;
@Value("${person.name}")
private String name; //名称
//省略toString (不需要set)
}
最后注意:@Value注解对于包含Map集合、对象以及YAML文件格式的行内式写法的配置文件的属性注入都不支持,如果赋值会出现错误!