2010-03-20 4 views
0

Je pense que c'est une question plutôt basique, mais après Google, je n'arrive pas à trouver la réponse. Ce dont j'ai besoin, c'est d'un moyen d'enregistrer une sortie personnalisée avec log4j pendant la construction du haricot de printemps. J'ai une classe d'usine appelée ResponderFactory (utilisée comme usine d'instance au printemps) avec une méthode d'usine qui peut lancer 2 types d'exceptions différents.Exceptions de journalisation lors de l'injection de haricots

public CollectorResponder collectorResponder(String inputQueueName) throws ConfigurationException, BrokerConnectionException {} 

Maintenant, normalement je pourrais envelopper un appel à cette méthode dans un bloc try-catch avec 2 clauses de prises pour gérer les situations d'exploitation pour chacune des exceptions. Cependant, si j'utilise Spring pour injecter ce CollectorResponder, créé avec l'usine, dans une autre classe, je ne vois pas comment cela est possible.

<bean id="responderFactory" class="com.package.ResponderFactory"> 
    <constructor-arg index="0" ref="basicDispatcher" /> 
    <constructor-arg index="1" value="http://localhost:9000" /> 
</bean> 

<bean id="collectorResponder" 
     class="com.package.CollectorResponder" 
     factory-bean="responderFactory" factory-method="collectorResponder"> 
    <constructor-arg value="collector.in" /> 
</bean> 

<bean id="collectorConsumer" class="com.package.CollectorConsumer"> 
    <constructor-arg ref="collectorResponder" /> 
</bean> 

Encore une fois, je veux attraper ces exceptions lorsque le haricot collectorResponder est instancié. En ce moment je traite avec ceci est CollectorConsumer quand j'instancie en utilisant new CollectorResponder(...).

Y at-il un moyen de le faire?

Répondre

0

Je pense que vous aurez besoin de passer un type différent au consommateur (en supposant que vous voulez enregistrer les erreurs dans le constructeur de CollectorConsumer) qui est une enveloppe autour de la construction réelle de l'objet collectorResponder. c'est-à-dire contient une méthode telle que

CollectorResponder create() throws whatever 

qui est appelée par votre constructeur consommateur. Cet objet wrapper serait incroyablement similaire à votre code d'usine mais ne serait pas compris au printemps. Dans le cas contraire, ces exceptions se produiront avant que le code de votre constructeur ne soit exécuté. Spring ne sera pas capable d'injecter des exceptions, et les proxys autour d'un objet de création incroyablement paresseux ne fonctionneront probablement pas sans une sorte d'appel de méthode.

Je suppose que vous ne voulez pas simplement enregistrer les exceptions dans responderFactory.

+0

Bien sûr, juste après avoir posté cette question, je me suis rendu compte qu'il serait stupide * pas * de noter les exceptions dans l'usine elle-même, ce que j'ai fini par faire. Merci pour la réponse! –

Questions connexes