今天,学习一下SpringBoot中几种属性注入的方式。
首先,先来认识几个注解
- @Value注解
- @ConfigurationProperties
- @PropertySource
- @EnableConfigurationProperties
1、@Value注解
@Value
注解可以加载application.properties配置文件的属性,并绑定的Bean的属性上面。
假如我们有这样一个实体类User,其中有username、age两个属性,使用下面的方式可以实现配置文件中的值与Bean的属性绑定:
User.java
@Component // 必须要将User类纳入Spring的IOC容器管理才能进行属性注入
public User {
@Value("${user.username}") // 将配置文件中的user.username的值绑定到username属性上
private String username;
@Value("${user.age}") // 将配置文件中的user.age的值绑定到age属性上
private int age;
//省略...
}
application.properties文件
user.username=张三
user.age=18
2、@ConfigurationProperties
@ConfigurationProperties
的用法和功能与@Value
类似,但是比@Vlaue
使用起来会更加方便,因为它可以指定属性的前缀,就可以自动地将配置文件中和Bean中相同的属性名称进行值绑定,我们改造一下User.java,可以达到和上面使用@Value
一样的效果。
User.java
@Component
@ConfigurationProperties(prefix = "user")
public class User {
private String username;
private int age;
// 省略...
}
3、@PropertySource
@PropertySource
注解可以引入其他配置文件,类似以前在xml配置方式中的
<context:property-placeholder ignore-unresolvable="true" location="classpath:user.properties"/>
4、@EnableConfigurationProperties
@EnableConfigurationProperties
在SpringBoot的自动注解配置类中使用特别广泛,此注解可以方便的将一个类纳入Spring IOC容器并进行属性绑定,不过,需要配置@ConfigurationProperties
注解一起使用,我们来看一下Gson的自动配置源码:
GsonAutoConfiguration.java(Gson的自动配置类)
@EnableConfigurationProperties({GsonProperties.class})
public class GsonAutoConfiguration {
public GsonAutoConfiguration() {
}
// 省略...
}
GsonProperties.java(Gson的一些相关配置属性)
@ConfigurationProperties(
prefix = "spring.gson"
)
public class GsonProperties {
private Boolean generateNonExecutableJson;
private Boolean excludeFieldsWithoutExposeAnnotation;
private Boolean serializeNulls;
// 省略...
}
总结,通过以上注解,我们可以方便的实现外部属性与Bean的绑定。