2012-05-13 3 views
0

J'essaie de déterminer la meilleure façon de charger un haricot de printemps, en fonction de la variable d'environnement système définie. Je réalise que ce serait une tâche simple en utilisant des profils, mais malheureusement j'utilise Spring 2.5. Voici donc la définition de haricot dans mon fichier XML:Charger dynamiquement SpringBean par environnement var

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

Fondamentalement, je suis à la recherche d'un moyen de charger seulement que le haricot fondé sur l'existence d'une variable d'environnement système, sinon, l'ignorer. J'ai examiné l'utilisation de BeanPostProcessors et BeanFactoryPostProcessors, mais je ne peux pas vraiment mettre le doigt sur la solution. Toute aide à ce sujet serait grandement appréciée. Merci!

Répondre

1

Vous pouvez implémenter un FactoryBean qui vérifierait la variable d'environnement et créerait le bean réel ou une implémentation NoOp - renvoyer une valeur nulle à partir de FactoryBean pourrait également fonctionner s'il n'est référencé nulle part.

class ListenerContainerFactory extends FactoryBean<MessageListenerContainer> { 

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

Grâce à gkamal, je vais essayer! – Eric