@PropertySource
@PropertySource将指定配置文件加载到spring容器中,但是不包括配置文件中属性的注入。
案例代码:
config.properties
spring.fut.username=fut
spring.fut.password=123456
spring.fut.age=18
FutConfigure.java
@ToString
@Data
@Configuration
@PropertySource(value = { "classpath:config.properties"}, ignoreResourceNotFound = true)
public class FutConfigure {
@Value("${spring.fut.username}")
private String username;
@Value("${spring.fut.password}")
private String password;
@Value("${spring.fut.age}")
private int age;
}
以上类有3个含义:
- FutConfigure的作用就是接收外部properties文件里属性的值。
- @PropertySource表明了它要将classpath路径下的config.properties加载到spring容器中。
- @Value表明它要将spring容器中对应key的值注入到FutConfigure类属性中。
有木有觉得使用起来很方便?两个注解就成功的将外部的properties文件加载到了内存中。并且被spring容器管理起来,这样任何地方想要使用它,都可以直接从spring容器中去获取。
下面思考下,如果FutConfigure属性超级多,那是不是我要不停地加上@Value呢?这就要使用到上次讲解的注解@ConfigurationProperties。
@ConfigurationProperties(再回顾下,加深印象)
@ConfigurationProperties的作用就是将配置文件里的属性值映射到被注解的类里面。显然,这个注解是类级别的。
案例代码:
FutConfigure.java
@ToString
@Data
@Configuration
@PropertySource(value = { "classpath:config.properties"}, ignoreResourceNotFound = true)
@ConfigurationProperties(prefix = "spring.fut")
public class FutConfigure {
// @Value("${spring.fut.username}")
private String username;
// @Value("${spring.fut.password}")
private String password;
// @Value("${spring.fut.age}")
private int age;
}
以上类有3个含义:
- FutConfigure的作用就是接收外部properties文件里属性的值。
- @PropertySource表明了它要将classpath路径下的config.properties加载到spring容器中。
- @ConfigurationProperties表明了它要将config.properties文件里以spring.fut开头的属性值注入到FutConfigure对应的属性当中。
@ConfigurationProperties和@Value,一个适用类级别的注入,一个适用属性和方法级别的注入。