什么是Spring的上下文注释<context:property-override>?</context:property-override>

时间:2015-02-25 11:52:22

标签: java spring spring-java-config

我们可以使用<context:property-placeholder>外部化属性,我们可以通过配置<context:property-override>来覆盖Spring bean属性,如下所示:

<context:property-placeholder location="classpath:application.properties"/>
<context:property-override location="classpath:override.properties"/>

我想将我的XML配置移动到JavaConfig。

@Configuration
@ComponentScan
@PropertySource("classpath:application.properties")
public class AppConfig {

    @Bean  
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {  
        return new PropertySourcesPlaceholderConfigurer();  
    }

}

但是如何使用Annotation配置覆盖属性?

PS: 我有一个bean说MyBean如下:

@Component
public class MyBean {

    @Value("${someProp}")
    private String someProp;
}

application.properties我有

someProp=TestValue

在我的override.properties中,我将someProp值覆盖为

myBean.someProp=RealValue

1 个答案:

答案 0 :(得分:2)

不,不是。

但您可以在配置类中创建类型为PropertyOverrideConfigurer的bean,但结果相同。

<强>更新

例如:

@Bean public static PropertyOverrideConfigurer  propertyOverrideConfigurer() { 
    PropertyOverrideConfigurer overrideConfigurer = new PropertyOverrideConfigurer(); 
    overrideConfigurer.setLocation(new ClassPathResource("override.properties"));
    return overrideConfigurer; 
}

请注意静态修饰符,这是因为BFPP应该在容器生命周期的早期实例化。

请参阅http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/Bean.html了解详情。