我目前正在使用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);
}
}
答案 0 :(得分:0)
查看可用的方法(来自JavaDoc for PropertyPlaceholderConfigurer
)向我建议没有简单的方法来做这样的事情。
顶部的一般性评论表明,从Spring 3.1开始,人们应该更喜欢使用PropertySourcesPlaceholderConfigurer
。使用此解决方案,您似乎可以通过setPropertySources(...)方法注册自己的PropertySource
个对象集。当然,你的Config
类必须适合PropertySource
的接口(实际上是抽象类)。
值得注意的是,使用上面的setPropertySources(...)
方法不会假设您的属性源,因此不会添加默认属性源(环境和本地属性)。