Ha annotare un fagiolo @DependsOn significa il fagiolo dipendente verrà istanziato o inizializzato?

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

  •  27-10-2019
  •  | 
  •  

Domanda

Sto usando Primavera 3.0.2. Ho due definizioni relativamente semplici di fagioli. Uno ha un @PostConstruct (fagioli 'A'), che innesca una catena di eventi che il @DependsOn fagioli (fagioli 'B') ha bisogno di essere preparati per. Tuttavia, sembra anche se questo ho affermato che il fagiolo 'A' è dipendente di fagioli 'B', gli eventi (i metodi del ciclo di vita) di fagioli 'A' sono in esecuzione prima di fagioli 'B' è completamente inizializzato.

fa affermando che un fagiolo è "dipendente" via @DependsOn (o per quella materia, dipende-on in una definizione di fagioli) significa che i metodi del ciclo di vita del bean dipendenti saranno completati prima il fagiolo che dipende da detto di fagioli?

Will fagioli metodi del ciclo di vita 'B' essere completati prima di fagioli 'A'?

Aggiorna

Bean A è una classe personalizzata che utilizza un modello di JMS per inviare un messaggio che annuncia che ha inizializzato.

Il destinatario di tali processi messaggio che e in avanti la sua configurazione a un MessageListeningContainer (Bean B).

La prima parte sta accadendo tutto prima Bean B è stato avviato dal 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>

Ho aggiunto nel mio metodo init l'iniezione di fagioli b più due dichiarazioni di registrazione:

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

ho guardato la fonte primavera e isActive è impostata su true dopo il metodo di inizializzazione (doInitialized è completato). L'IsRunning è impostato dopo l'doStart è completata. Il doStart viene attivato dal DefaultLifecycleProcessor che si osserva dopo i metodi @PostConstruct annotati sono chiamati.

Come posso garantire che il mio metodo Postconstruct viene chiamato dopo di fagioli b è stato inizializzato e ha iniziato?

È stato utile?

Soluzione

In your particular case @PostConstruct method of bean A won't be called until B is fully initialized, ie. all its dependencies are injected and its @PostConstruct finishes executing.

updated: Since you are relying on Spring Lifecycle functionality here, can you implement Lifecycle in A and move your JMS call to start() method there?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top