Bedeutet das Annotieren einer Bean @Dependson, die abhängige Bean wird instanziiert oder initialisiert?

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

  •  27-10-2019
  •  | 
  •  

Frage

Ich benutze Frühling 3.0.2. Ich habe zwei relativ einfache Bohnendefinitionen. Man hat ein @Postconstruct (Bean 'a'), das eine Kette von Ereignissen auslöst, auf die die @Dependson -Bean (Bean 'B') vorbereitet sein muss. Es scheint jedoch, obwohl ich feststellte, dass die Bean 'A' von Bean 'B' abhängig ist, die Ereignisse (die Lebenszyklusmethoden) von Bean 'A' sind vor der Bean 'B' vollständig initialisiert.

Bedeutet die Angabe, dass eine Bean über @Dependson "abhängig" ist (oder in dieser Angelegenheit in einer Bean-Definition abhängt), dass die Lebenszyklusmethoden der abhängigen Bean vor der Bohne abgeschlossen werden, die von dieser Bean abhängig ist?

Werden Bean 'B' Lifecycle -Methoden vor Bean 'A' abgeschlossen werden?

AKTUALISIEREN

Bean A ist eine benutzerdefinierte Klasse, die eine JMS -Vorlage verwendet, um eine Nachricht zu senden, in der angekündigt wird, dass er initialisiert wurde.

Der Empfänger dieser Nachricht verarbeitet es und leitet seine Konfiguration an einen MessagelisteningContainer (Bean B) weiter.

Der erste Teil ist alles, bevor Bean B vom StandardlifecycleProcessor gestartet wurde.

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

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

Ich habe in meiner Init -Methode die Injektion von Bean B plus zwei Protokollierungsanweisungen hinzugefügt:

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

Ich habe mir die Federquelle angesehen und Isactive wird nach der Initialisierungsmethode auf True eingestellt (doInitialized ist abgeschlossen). Der Isrunning ist festgelegt, nachdem der Dostart abgeschlossen ist. Der Dostart wird durch den StandardlifecycleProcessor ausgelöst, der auftritt, nachdem die @Postconstruct -kommentierten Methoden aufgerufen wurden.

Wie kann ich garantieren, dass meine Postkonstruktion nach Bean B initialisiert und begonnen wurde?

War es hilfreich?

Lösung

In Ihrem speziellen Fall @PostConstruct Die Bean -Methode wird erst aufgerufen, bis B vollständig initialisiert ist, dh. Alle seine Abhängigkeiten werden injiziert und seine @PostConstruct Ausführungen.

Aktualisiert: Da Sie sich hier auf die Lebenszyklusfunktionalität des Frühlings verlassen, können Sie sich implementieren Lifecycle in a und verschieben Sie Ihren JMS -Anruf auf start() Methode dort?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top