关于 PropertyOverrideConfigurer PropertySourcesPlaceholderConfigurer
前言
它们是 Spring 提供的基础组件,用于将 bean 属性通过配置化动态赋值,比如本地配置文件等,乍一听有点类似 Spring Boot 的 外部化配置 机制,我感觉这就是 外部化配置 思维的雏形
PropertyOverrideConfigurer
- 它是一种
PUSH的处理方式,将配置中的属性主动推送(赋值)给bean实例 - 它通过
beanName.property=value的形式来给bean属性赋值,本质上是对BeanDefinition PorpertyValues的操作 - 它看上去很接近
Spring Boot的ConfigurationProperties机制,当然功能远远没有后者强大
demo
public class PropertyOverrideConfigurerTest {
@Test
public void test() {
AnnotationConfigApplicationContext context
= new AnnotationConfigApplicationContext(Config.class);
Config.A bean = context.getBean(Config.A.class);
System.out.println(bean.getName());
}
@Configuration
static class Config {
@Bean
public PropertyOverrideConfigurer propertyOverrideConfigurer() {
PropertyOverrideConfigurer propertyOverrideConfigurer = new PropertyOverrideConfigurer();
propertyOverrideConfigurer.setLocation(new ClassPathResource("application.properties"));
return propertyOverrideConfigurer;
}
@Bean
public A a() {
return new A();
}
static class A {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
}
- 示例中我们注册了一个
PropertyOverrideConfigurer,并为其指定配置文件路径classpath:/application.properties - 同时注册了一个
bean实例A,并未为其指定name属性 - 则此时我们可以在配置文件
classpath:/application.properties中通过a.name=xxx为其指定属性 - 很类似于
Spring Boot的ConfigurationProperties,当然ConfigurationProperties支持的场景更加复杂灵活
PropertySourcesPlaceholderConfigurer
- 跟
PropertyOverrideConfigurer相反,它是PULL的处理方式:通过占位符为bean实例指定属性,然后从PropertySources中解析对应的属性 - 其实类似机制的还有一个
PropertyPlaceholderConfigurer,但该类局限于指定的 配置源,已被标记为@Deprecated PropertySourcesPlaceholderConfigurer的属性源即Environment#propertySources,在Spring Boot中配合外部化配置就更加强大了Spring Boot默认自动装配的就是PropertySourcesPlaceholderConfigurer,详情见PropertyPlaceholderAutoConfiguration- 此类就不
demo示例了,在任一Spring Boot工程下的application.properties中使用占位符就是此类场景
总结
PropertyOverrideConfigurer和PropertySourcesPlaceholderConfigurer是Spring提供的基础组件,用于实现bean属性和配置源的关联PropertyOverrideConfigurer是配置源PUSH到bean属性的模式,有点类似于Spring Boot的ConfigurationProperties机制PropertySourcesPlaceholderConfigurer是占位符标识的bean属性从配置源PULL的机制,结合Spring Boot的外部化配置更加强大,也是Spring Boot默认自动装配的实例
版权声明:本文为weixin_42189048原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。