2016-12-06 4 views
0

J'utilise des événements d'application Spring pour envoyer des informations à d'autres beans. Il y a un bean A qui publie un événement dès que A est initialisé. Et il y a un haricot B qui écoute les événements envoyés par A.Absence d'un événement au printemps

En fonction du temps A est initialisés parmi les autres haricots, B s'initialisés à la fin, et rate l'événement envoyé par A.

Comment Est-il prévu au printemps de contourner ces problèmes? Y a-t-il un autre moyen que de changer l'ordre d'initialisation du bean?

+0

Consultez cette rubrique: http://stackoverflow.com/questions/13770225/spring-3-bean-instantiation-sequence – nowszy94

Répondre

1

Une façon probable est d'utiliser

dépend sur

attribute.You peut définir la dépendance au cas où vous utilisez

configuration .xml:

<bean id="A" depends-on="B"/> 

Annotation basée:

@DependsOn("B") 
public class A {} 

Ce printemps forces à intialize B avant A afin qu'il ne manquera pas l'événement publié par A.

+0

Au lieu de XML, vous pouvez (et devez) utiliser l'annotation correspondante (http: // docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/DependsOn.html). –

+0

Je crois que vous avez mentionné le lien de l'annotation basée à la place de xml .. son ouverture ne s'ouvre pas même si plz vérifie. OP n'a pas mentionné s'il est basé sur XML ou sur des annotations. – mhasan

+0

Oui, j'ai lié l'annotation correspondante par souci d'exhaustivité, donc OP peut choisir non plus. –

0

Vous pouvez créer méthode init() dans vos haricots, puis dans votre fonction main faire des appels à init() méthodes de chaque haricot. Vous pouvez commander les appels comme vous le souhaitez, et en particulier appeler le init() de A avant celui de B. Ensuite, vous devrez mettre la publication de l'événement de bean A dans la méthode init() de A.