从bean加载Spring的属性

时间:2013-06-10 17:12:44

标签: spring

我目前正在使用PropertyPlaceholderConfigurer将属性加载到我的spring上下文中,但是我希望有一个自定义层次结构/覆盖我在Java类中处理的属性文件。我可以让我的类本身是上下文中的bean,将属性注入上下文吗?

e.g。

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations" value="classpath:/config/conf.properties" />
</bean>

<bean id="config" class="com.main.Config" />

我的Config类有一个Properties getProperties()方法 - 我能以某种方式将它连接到spring吗?显然,在创建或引入配置bean之前,不会加载属性。

谢谢!

更新:根据答案的建议,我将配置更改为Config extends PropertySource<Properties>,并且必须在MutablePropertySources周围编写一个小包装,只需一个PropertySource和然后我的xml看起来像这样:

<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
    <property name="propertySources">
        <bean class="com.main.ConfigMutablePropertySources">
             <constructor-arg name="propertySource" ref="config" />
        </bean>
    </property>
</bean>

其中:

public class ConfigMutablePropertySources extends MutablePropertySources {
    public ConfigMutablePropertySources(PropertySource<?> propertySource) {
        super(new MutablePropertySources());
        addLast(propertySource);
    }
}

1 个答案:

答案 0 :(得分:0)

查看可用的方法(来自JavaDoc for PropertyPlaceholderConfigurer)向我建议没有简单的方法来做这样的事情。

顶部的一般性评论表明,从Spring 3.1开始,人们应该更喜欢使用PropertySourcesPlaceholderConfigurer。使用此解决方案,您似乎可以通过setPropertySources(...)方法注册自己的PropertySource个对象集。当然,你的Config类必须适合PropertySource的接口(实际上是抽象类)。

值得注意的是,使用上面的setPropertySources(...)方法不会假设您的属性源,因此不会添加默认属性源(环境和本地属性)。