通过环境var动态加载SpringBean

时间:2012-05-13 03:18:24

标签: spring spring-jms

我正在尝试找出加载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的使用,但不能完全理解解决方案。任何有关这方面的帮助将不胜感激。谢谢!

1 个答案:

答案 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
        }
     }
}