2012-05-13 1 views
0

設定されているシステム環境変数に応じて、Spring Beanを読み込む最良の方法を理解しようとしています。私はこれがプロファイルを使った単純な作業であることを認識していますが、残念ながらSpring 2.5を使用しています。だからここに私のXMLファイル内のBean定義されています。基本的に、私はそれ以外の場合は、それを無視し、唯一のシステム環境変数の有無に基づいて、そのBeanをロードする方法を探しています環境によってSpringBeanを動的にロードする

<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> 

。私はBeanPostProcessorsとBeanFactoryPostProcessorsの使用について調べてきましたが、私の指をソリューションに置くことはできません。これに関する助けがあれば大いに感謝します。ありがとう!

答えて

1

環境変数をチェックして実際のBeanまたはNoOp実装を作成するFactoryBeanを実装することができます。FactoryBeanからnullを返すことは、どこでも参照されない場合にも機能します。

class ListenerContainerFactory extends FactoryBean<MessageListenerContainer> { 

    MessageListenerContainer getObject() { 
     if (someCondition) { 
      // create and return DefaultMessageListenerContainer 
     } else { 
      // return null or some NoOpMessageListenerContainer 
     } 
    } 
} 
+0

ありがとうgkamal、私はそれを試してみましょう! – Eric