Sto studiando per la certificazione Spring Core e ho qualche dubbio su come Spring gestisce il ciclo di vita dei bean e in particolare sul bean post processor .
Quindi ho questo schema:
È abbastanza chiaro per me cosa significa:
I seguenti passaggi si svolgono nella fase di caricamento delle definizioni dei bean :
Le classi @Configuration vengono elaborate e / o vengono esaminati i componenti @ e / o vengono analizzati i file XML .
Definizioni di bean aggiunte a BeanFactory (ciascuna indicizzata con il proprio ID)
I bean speciali BeanFactoryPostProcessor richiamati, possono modificare la definizione di qualsiasi bean (ad esempio per le sostituzioni dei valori segnaposto proprietà).
Quindi i seguenti passaggi avvengono nella fase di creazione dei fagioli :
Ogni bean viene istanziato con entusiasmo per impostazione predefinita (creato nel giusto ordine con le sue dipendenze iniettate).
Dopo l'inserimento delle dipendenze, ogni bean passa attraverso una fase di post-elaborazione in cui possono verificarsi ulteriori configurazioni e inizializzazioni.
Dopo la post-elaborazione il bean è completamente inizializzato e pronto per l'uso (tracciato dal suo id fino a quando il contesto non viene distrutto)
Ok, questo è abbastanza chiaro per me e so anche che ci sono due tipi di processori di bean post che sono:
Inizializzatori: inizializza il bean se richiesto (ad esempio @PostConstruct).
e tutto il resto: che consentono una configurazione aggiuntiva e che può essere eseguito prima o dopo la fase di inizializzazione
E posto questa diapositiva:
Quindi è molto chiaro per me cosa fanno gli inizializzatori bean post processors (sono i metodi annotati con l' annotazione @PostContruct e che vengono chiamati automaticamente immediatamente dopo i metodi setter (quindi dopo l'iniezione delle dipendenze), e so che posso usarli per eseguire un batch di inizializzazione (come popolare una cache come nell'esempio precedente).
Ma cosa rappresenta esattamente l'altro bean post processor? Cosa intendiamo quando diciamo che questi passaggi vengono eseguiti prima o dopo la fase di inizializzazione ?
Quindi i miei bean vengono istanziati e le sue dipendenze vengono iniettate, quindi la fase di inizializzazione è completata (mediante l'esecuzione di un metodo annotato @PostContruct ). Cosa si intende per dire che prima della fase di inizializzazione viene utilizzato un Bean Post Processor? Significa che accade prima dell'esecuzione del metodo annotato @PostContruct ? Significa che potrebbe accadere prima dell'iniezione delle dipendenze (prima che vengano chiamati i metodi setter)?
E cosa intendiamo esattamente quando diciamo che viene eseguito dopo la fase di inizializzazione . Significa che succede dopo l'esecuzione di un metodo annotato @PostContruct , o cosa?
Posso facilmente capire nella mia testa perché ho bisogno di un metodo annotato @PostContruct ma non riesco a immaginare un esempio tipico dell'altro tipo di processore di bean post, puoi mostrarmi qualche esempio tipico di quando vengono utilizzati?