Spring Boot 核心配置与注解02——配置文件属性值的注入

1.使用@ConfigurationProperties注入属性
Spring Boot提供的@ConfigurationProperties注解将配置文件中的自定义属性值批量的注入到某个Bean对象的多个属性中。具体方法可以参考全局配置文件中的例子。
如果是自定义的配置文件,需要在配置类中加入@Configuration或者@Component 和 @PropertySource注解。
@Configuration注解用于表示当前类是一个自定义配置类,该类会作为Bean对象添加到Spring容器中,这里等同于@Component注解
@@PropertySource注解指定自定义配置文件的位置和名称。
如果使用的是@Configuration注解,则需要使用@EnableConfigurationProperties注解表示开启对应配置类的属性注入功能,如果使用的是@Component注解,则@EnableConfigurationProperties注解就可以省略。
2.使用@Value注入属性
@Value注解是Spring框架提供的,用来读取配置文件中的属性值并逐个注入Bean对象的对应属性中。Spring Boot框架对Spring框架中的@Value注解进行了默认继承,所以在Spring Boot框架中还可以使用该注解读取和注入配置文件属性值。
例子:

public class Pet {
    @Value("${pet.type}")
    private String type;

@Value不仅支持注入属性,还可以直接为属性赋值,这是@ConfigurationProperties不支持的。
3.两种注解的比较

对比点 @ConfigurationProperties @Value
底层框架 Spring Boot Spring
功能 批量注入 单个注入
setter方法 需要 不需要
杂类型属性值注入 支持 不支持
松散绑定 支持 不支持
JSR303数据校验 支持 不支持
SpEL表达式 不支持 支持

具体说明:
1.底层框架
@ConfigurationProperties注解是Spring Boot框架自带的;而@Value注解是Spring框架支持的,只不过Spring Boot框架对Spring进行了默认支持,所以也可以使用@Value注解的相关功能。
2.功能
@ConfigurationProperties注解能够将配置文件中的属性批量注入到Bean对象中,而@Value智能单个注入。
3.setter方法
在使用@ConfigurationProperties注解进行配置文件属性值注入时,还必须为每个属性设置setter方法。如果配置文件中没有配置相应属性,则会自动将对应的Bean属性设置为空。@Value不需要为属性设置setter属性。
4.复杂类型属性注入
@ConfigurationProperties支持任意数据类型的属性注入,包括基础数据类型和复杂数据类型,@Value只能诸如基本类型的属性。
5.松散绑定
@ConfigurationProperties注解进行配置文件属性注入时,支持松散绑定语法。例如Person类中有一个字符串类型的属性firstName,那么在配置文件中可以如下语句进行配置

person.firstName=ddd //标准写法
person.FIRST_NAME=ddd //使用大写字母,并用下划线“_”分割
person.first-name=ddd //使用横线“-”分割
person.first_name=ddd //使用下划线“_”分割

@Value注解不支持松散绑定语法。
6.JSR303数据校验
@ConfigurationProperties注解进行配置文件属性注入时,支持JSR303数据校验。其主要作用是校验配置文件中注入对应Bean对象的属性值是否符合相关值的规则。
@Value注解不支持JSR303数据校验功能
7.SpEL表达式
@Value注解注入配置文件属性时,支持SpEL表达式语法,即“#{xx}”。例如Person类有一个整型的属性id

    @Value("#{5*2}")
    private int id;

@ConfigurationProperties注解不支持该功能。
————————————————————————————————————————
参考资料《Spring Boot企业级开发教程》

你可能感兴趣的:(spring,boot)