2010-11-30 22 views
1

Je suis très nouveau au printemps. J'ai une interface (MessageHandler) qui a une méthode get, cette méthode retourne une liste d'implémentations d'une autre interface (messageChecker).Spring Fichier de configuration constitué d'une liste d'implémentations

public interface MessageHandler { 
    public void process(BufferedReader br); 
    public void setMessageCheckerList(List mcList); 
    [B]public List getMessageCheckerList();[/B] 
} 

Dans ma configuration XML Spring, j'ai quelque chose comme ça, ainsi que d'autres haricots

<bean id="messageHandler" class="com.XXX.messagereceiver.MessageHandlerImpl"> 
    <property name="messageCheckerList" ref="checkerList"/> 
</bean> 

<bean id="checkerList" class="java.util.ArrayList"> 
    <constructor-arg> 
    <list> 
    <ref bean="HL7Checker"/> 
    </list> 
    </constructor-arg> 
</bean> 

<bean id="HL7Checker" class="com.XXX.messagereceiver.HL7CheckerImpl"> 
    <property name="messageExecutor" ref="kahootzExecutor"/> 
</bean> 

Ici je passe un checkerlist - qui est une liste de Implémentations (Pour l'instant j'ai seulement 1) de l'interface (messageChecker)

Checkerlist contient des références à des identifiants de bean qui sont des implémentations réelles. HL7Checker est une implémentation d'une interface MessageChecker.

Mais quand j'exécute le programme principal, Quand j'injecte le bean "messageHandler" et appelle le getMessageCheckerList, Il renvoie une valeur nulle. Ces méthodes getter et setter fonctionnent bien sans utiliser de ressort.

Je ne suis pas sûr de ce qui semble être le problème.

Répondre

0

Je ne connais pas la réponse pour vous ennuis, mais je vérifierais:

  • est le poseur setMessageCheckerList(List) dans messageHandler haricot appelé? (soit en utilisant un débogueur ou une sortie de trace comme System.out...). Si ce n'est pas le cas, il y a probablement un problème avec votre configuration de configuration Spring XML. La définition du bean que vous avez publiée nécessite que la propriété soit définie et Spring ne crée pas le bean messageHandler sans définir la propriété.
  • qui appelle le setter setMessageCheckerList(List)? Ou encore plus précis, quel code écrit sur le terrain qui stocke la valeur de la propriété? Peut-être que le champ est initialisé correctement par Spring mais est écrasé à null plus tard?
  • Etes-vous sûr que vous appelez le getMessageCheckerList sur le même objet Spring a configuré pour vous (c'est-à-dire le bean messageHandler). La définition que vous avez affichée indique clairement qu'une instance de MessageHandlerImpl est créée par Spring, mais elle n'empêche pas la création d'autres instances d'autres façons. Alors peut-être que l'instance créée par Spring contient la bonne valeur, mais vous exécutez le get... sur une mauvaise instance?
+0

Merci Grzegorz, j'avais créé un nouveau messagehandler dans mon implémentation. Cela fonctionne bien maintenant. – velapanur