我正在尝试找出加载spring bean的最佳方法,具体取决于所设置的系统环境变量。我意识到这将是一个使用配置文件的简单任务,但不幸的是我使用的是Spring 2.5。所以这是我的XML文件中的bean定义:
<bean id="updateBlogEntryListenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="concurrentConsumers" value="1"/>
<property name="connectionFactory" ref="jmsConnectionFactory"/>
<property name="destinationName" value="queue/updateBlogEntryQueue"/>
<property name="messageListener" ref="updateBlogEntryMessageHandler"/>
<property name="transactionManager" ref="transactionManager"/>
<property name="sessionTransacted" value="true"/>
<property name="destinationResolver" ref="destinationResolver"/>
</bean>
基本上,我正在寻找一种方法,只根据系统环境变量的存在加载该bean,否则忽略它。我一直在研究BeanPostProcessors和BeanFactoryPostProcessors的使用,但不能完全理解解决方案。任何有关这方面的帮助将不胜感激。谢谢!
答案 0 :(得分:1)
您可以实现一个FactoryBean来检查环境变量并创建实际的bean或一些NoOp实现 - 如果没有在任何地方引用它,也可以从FactoryBean返回null。
class ListenerContainerFactory extends FactoryBean<MessageListenerContainer> {
MessageListenerContainer getObject() {
if (someCondition) {
// create and return DefaultMessageListenerContainer
} else {
// return null or some NoOpMessageListenerContainer
}
}
}