Est-ce que annoter un haricot @DependsOn signifie sera instancié ou initialisé le grain dépendant?

StackOverflow https://stackoverflow.com/questions/8822712

  •  27-10-2019
  •  | 
  •  

Question

J'utilise Spring 3.0.2. J'ai deux définitions de haricots relativement simples. On a un @PostConstruct (haricot « A ») qui déclenche une chaîne d'événements que le haricot @DependsOn (haricot « B ») doit être préparé. Cependant, il semble bien que je l'ai dit que le haricot « A » dépend de haricot « B », les événements (les méthodes du cycle de vie) de haricot « A » sont en cours d'exécution avant le haricot « B » est complètement initialisé.

ne déclarant qu'un haricot est « à charge » par @DependsOn (ou pour cette matière, dépend-on dans une définition de haricot) signifient que les méthodes du cycle de vie de haricots dépendants seront achevés avant la fève qui est dépendante dit Bean?

Will haricot 'B' des méthodes du cycle de vie être terminés avant le haricot 'A'?

UPDATE

Bean A est une classe personnalisée qui utilise pour envoyer un message annonçant qu'il a initialisé un modèle JMS.

Le destinataire desdits processus de message et il transmet la configuration de à un MessageListeningContainer (Bean B).

La première partie se produit tout avant Bean B a été commencé par le DefaultLifecycleProcessor.

@Component
@DependsOn("beanB")
public class BeanA {
    @PostConstruct
    public void init() {
        // do stuff
    }
}

<bean id="beanB" class="org.springframework.jms.listener.DefaultMessageListenerContainr">
    <!-- other configuration -->
</bean>

I ajouté dans mon procédé d'initialisation de l'injection de haricot b plus de deux états d'exploitation:

container.isRunning();
container.isActive();

Je regarde la source de ressort et isActive est réglé sur vrai après le procédé d'initialisation (doInitialized est terminée). Le enFonctionnement est réglé après la doStart terminée. Le doStart est déclenché par le DefaultLifecycleProcessor qui se produit après que les méthodes de @PostConstruct annotée sont appelés.

Comment puis-je garantir que ma méthode est appelée après PostConstruct haricot b a été initialisé et a commencé?

Était-ce utile?

La solution

Dans votre méthode particulière de cas @PostConstruct de haricot A ne sera pas appelé jusqu'à ce que B est complètement initialisé, ie. toutes ses dépendances sont injectées et ses finitions @PostConstruct d'exécution.

mise à jour: Étant donné que vous comptez sur la fonctionnalité du cycle de vie du printemps ici, vous pouvez mettre en œuvre dans Lifecycle A et déplacer JMS appel à la méthode de start() il?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top