您可以使用PropertyPlaceholderConfigurer
替代bean属性,别名和其他位置中的占位符的属性值。需要注意的是替换发生后的bean定义已加载,所以这种机制并不适用于<import>
元素
例如:
...
<bean id="ppc"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:build.properties</value>
<value>classpath:default-emmet-substitution.properties</value>
<value>classpath:default-danno-substitution.properties</value>
<value>classpath:default-dannotate-substitution.properties</value>
<value>classpath:substitution.properties</value>
</list>
</property>
</bean>
...
欲了解更多信息,请参阅Spring框架文档的this section。
编辑 - 我想从您的评论你已经熟悉了占位符替换是如何工作的,并使用PropertyPlaceholderConfigurer
做替代品。所以,现在你需要这些策略,或某种组合之间进行选择:
执行占位符替换自己自定义BeanDefinitionDecorator
。这将工作,虽然你会复制大量的代码。
定制BeanDefinitionDecorator
是否将占位符名称修改为不同的占位符名称,以便拉入不同的值;例如"${jdbc.url}"
变成"${spy.jdbc.url}"
。
扩展PropertyPlaceholderConfigurer
类来修改替换的属性值;即覆盖convertProperty
或convertProperties
。这就存在所有占位符都会得到修改后的值的潜在问题......不仅仅是你装饰过的bean中的那些值。
创建一个新的PropertyResourceConfigurer
类来代替根据上下文不同的属性值。本质上,processProperties
需要像PropertyPlaceholderConfigurer
中的方法那样工作,但如果它看到bean属性或任何指示它执行“间谍”替换的内容,则可以做一些不同的事情。
2)和3)的组合看起来最有希望。
谢谢,这就是我一直在寻找的。我尝试使用BeanPostProcessor,但是获取属性为时已晚;这正是我所需要的。 – 2010-03-06 15:22:24