Estou estudando para a certificação Spring Core e tenho algumas dúvidas sobre como o Spring lida com o ciclo de vida dos beans e, em particular, sobre o pós-processador do bean .
Então, eu tenho este esquema:
É muito claro para mim o que significa:
As etapas a seguir ocorrem na fase de Definições do bean de carregamento :
As classes @Configuration são processadas e / ou @Components são verificados e / ou arquivos XML são analisados.
Definições de bean adicionadas ao BeanFactory (cada um indexado sob seu id)
Beans BeanFactoryPostProcessor especiais chamados, ele pode modificar a definição de qualquer bean (por exemplo, para as substituições de valores de placeholder de propriedade).
Em seguida, as seguintes etapas ocorrem na fase de criação de feijão :
Cada bean é instanciado avidamente por padrão (criado na ordem correta com suas dependências injetadas).
Após a injeção de dependência, cada bean passa por uma fase de pós-processamento em que configuração e inicialização adicionais podem ocorrer.
Após o pós-processamento, o bean é totalmente inicializado e pronto para uso (rastreado por seu id até que o contexto seja destruído)
Ok, isso está muito claro para mim e também sei que existem dois tipos de pós-processadores de feijão :
Inicializadores: inicializam o bean se instruído (isto é, @PostConstruct).
e Todo o resto: que permite configuração adicional e que pode ser executado antes ou depois da etapa de inicialização
E eu posto este slide:
Portanto, está muito claro para mim o que os inicializadores bean post processors (eles são os métodos anotados com a anotação @PostContruct e que são chamados automaticamente imediatamente após os métodos setter (após a injeção de dependência), e eu sei que posso usar para execute algum lote de inicialização (como preencher um cache como no exemplo anterior).
Mas o que exatamente representa o outro pós-processador de bean? O que queremos dizer quando afirmamos que essas etapas são realizadas antes ou depois da fase de inicialização ?
Portanto, meus beans são instanciados e suas dependências são injetadas, então a fase de inicialização é concluída (pela execução de um método anotado @PostContruct ). O que queremos dizer ao dizer que um Bean Post Processor é usado antes da fase de inicialização? Isso significa que isso acontece antes da execução do método anotado @PostContruct ? Isso significa que pode acontecer antes da injeção de dependência (antes que os métodos setter sejam chamados)?
E o que exatamente queremos dizer quando dizemos que é executado após a etapa de inicialização . Significa que depois disso ocorre a execução de um método anotado @PostContruct , ou o quê?
Posso imaginar facilmente por que preciso de um método anotado @PostContruct , mas não consigo imaginar algum exemplo típico do outro tipo de pós-processador de bean. Você pode me mostrar algum exemplo típico de quando são usados?