Prefácio
O contêiner do COI da Spring é muito poderoso, responsável pela criação e gerenciamento dos grãos da primavera e outras funções. Os grãos de mola são uma parte importante de toda a aplicação da primavera. Compreender o ciclo de vida dos feijões de primavera será de grande ajuda para entendermos toda a estrutura da primavera.
Beanfactory e ApplicationContext são dois recipientes importantes da primavera. O primeiro fornece o suporte mais básico para a injeção de dependência, enquanto o último expande suas funções com base no herdeiro do primeiro, como adicionar funções como propagação de eventos, acesso a recursos e acesso internacional a mensagens. Este artigo apresenta principalmente o ciclo de vida dos grãos em dois contêineres ApplicationContext e Beanfactory.
Primeiro, olhe no gráfico do ciclo de vida:
Vamos falar sobre o ciclo de vida antes de falarmos sobre isso:
A primavera só nos ajuda a gerenciar o ciclo de vida completo dos feijões modelo de singleton. Para os feijões de protótipo, a primavera não gerenciará mais os ciclos de vida subsequentes depois de serem criados e entregues ao usuário.
Método de anotação
Existem vários estágios ao inicializar o feijão. Primeiro, você pode usar o anotação @PostConstruct e @predestroy para chamá -lo no estágio de criação e destruição do feijão:
@ComPonenPublic Classe AnoTationBean {private final Static Logger Logger = LoggerFactory.getLogger (ANNOTATIONBEAN.CLASS); @PostConstruct public void start () {logger.info ("anotação startBean"); } @Predestroy public void Destroy () {Logger.info ("AnoTationBean Destroy"); }}Inicializando a interface DisposableBean
Você também pode implementar as duas interfaces do InitializingBean e DisposableBean, que também são chamadas durante os estágios de inicialização e destruição:
@ServicePublic Class SpringlifeCycleService implementa InitializandoBean, DisposableBean {private final Static Logger = LoggerFactory.getLogger (springlifeCycleService.class); @Override public void depoisPropertiESSET () lança exceção {Logger.info ("SpringlifeCycleService Start"); } @Override public void Destroy () lança Exceção {Logger.info ("SpringlifeCycleService Destroy"); }}Métodos de inicialização e destruição personalizados
Você também pode personalizar métodos para chamadas durante os estágios de inicialização e destruição:
@ConfigurationPublic Classe LIFECYCLECONFIG {@Bean (initMethod = "start", DestroyMethod = "Destroy") public SpringlifeCycle Create () {SpringlifeCycle Springlifecycle = new Springlifecycle (); Retornar SpringLifecycle; }} classe pública SpringlifeCycle {private final estático logger logger = LoggerFactory.getLogger (springlifecycle.class); public void start () {Logger.info ("SpringlifeCycle Start"); } public void Destroy () {Logger.info ("Springlifecycle Destroy"); }}O acima é configurado no Springboot dessa maneira e também pode ser usado se for baseado em XML original:
<bean init-method = "start" destruir-method = "destruir"> </shean>
para alcançar o mesmo efeito.
Implementar *interface consciente
*A interface consciente pode ser usada para obter alguns objetos na primavera ao inicializar os feijões, como a obtenção do contexto da mola.
@ComponentPublic Class SpringlifeCycleaware implementa ApplicationContexTAWare {private final Static Logger = LoggerFactory.getLogger (springlifeCycleAware.class); ApplicationContext ApplicationContext privado; @Override public void setApplicationContext (ApplicationContext ApplicationContext) lança beansexception {this.applicationContext = ApplicationContext; Logger.info ("springlifecycleaware start"); }}Dessa forma, o método SetapplicationContext será chamado na inicialização do bean springlifecyclearyware e o objeto ApplicationContext pode ser obtido.
Processador aprimorado do BEANPOSTPROCESSOR
Implementar a interface do BEANPOSTPROCESSOR. Todos os grãos na primavera chamarão dois métodos na interface ao inicializar, que podem ser usados para processar alguns grãos especiais:
@ComponentPublic Class SpringlifeCycleProcessor implementa o BeanPostProcessor {private final Static Logger = LoggerFactory.getLogger (SpringlifeCycleProcessor.class); / ** * Chamado antes da pré-inicialização * @param Bean * @param beanname * @return * @throws beansexception */ @Override Public Object PostprocessBeForeinitialization (objeto Bean, string beanname) lança beansception {if ("annotationBean (. beanname = {} ", beanname); } retornar Bean; } / ** * Inicialização do Bean Pós-Inicialização CHAMADA COMPLETA * @param bean * @param beanname * @return * @throws beansexception * / @Override Public Object PostProcesSAfterinitialization (objeto Bean, string beanname) lança beansception {if ("anTationBean". Logger.info ("springlifecycleprocessor end beanname = {}", beanname); } retornar Bean; }}Resultados da observação após a execução:
018-03-21 00: 40: 24.856 [RESTIRTEDMAIN] Info CCSPSpringLifeCycleProcessor-SpringlifecycleProcessor Start Beanname = AnoTationBean2018-03-21 00: 40: 24.860 [RestartedMain] Information-03-21 00: 40: 24.860 [Restartedmain] 00: 40: 24.861 [RESTARTEDMAIN] Info CCSPSpringLifeCycleProcessor-SpringlifecycleProcessor End Beanname = AnoTationBean2018-03-21 00: 40: 24.864 [Reiniciar] INFO-2-ACLUSECHECHEARE.SPRINGLIFECLELEWARSELHECHARELHEWARE-LECLIFECHECHECHELHEWAWHELHEWARE. 00:40:24.867 [restartedMain] INFO ccspring.SpringLifeCycleService - SpringLifeCycleService start2018-03-21 00:40:24.887 [restartedMain] INFO ccspring.SpringLifeCycle - SpringLifeCycle start2018-03-21 00:40:25.062 [restartedMain] INFO osbdaOptionalLiveReloadServer - LiveReload server is running on port 357292018-03-21 00:40:25.122 [restartedMain] INFO osjeaAnnotationMBeanExporter - Registering beans for JMX exposure on startup2018-03-21 00:40:25.140 [restartedMain] INFO com.crosSoverjie.Application-Iniciou a aplicação em 2,309 segundos (JVM em execução para 3.681) 2018-03-21 00: 40: 25.143 [RestartedMain] Info com.crosSoverjie.Application-Iniciar o OK! 2018-03-21 00: 40: 25.153 [Thread]. org.springframework.context.annotation.annotationConfigApplicationContext@3913adad: data de inicialização [quarta -feira 21 de março 00:40:23 CST 2018]; Raiz do contexto Hierarchy2018-03-21 00: 40: 25.155 [Thread-8] InfoSJeaannotationMBeanExporter-Beans expostos a JMX que não registrar 00: 40: 25.156 [Thread-8] info ccservice.springlifeCycleService-SpringlifeCycleService Destroy2018-03-21 00: 40: 25.156 [Thread-8] info ccspring.annotation.annotationbean-anotaçãoBean
Até o contexto da primavera ser destruído, um método de destruição personalizado e o método Destroy () que implementa o DisposableBean serão chamados.
Resumir
O exposto acima é o ciclo de vida do feijão da primavera introduzido pelo editor. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!