0

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

4

1 回答 1

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
        }
     }
}
于 2012-05-13T14:48:54.533 回答