Prefacio
El contenedor del COI de Spring es muy poderoso, responsable de la creación y gestión de los frijoles de Spring y otras funciones. Los frijoles de primavera son una parte importante de toda la aplicación de primavera. Comprender el ciclo de vida de los frijoles de primavera será de gran ayuda para comprender todo el marco de primavera.
BeanFactory y ApplicationContext son dos contenedores importantes de la primavera. El primero proporciona el soporte más básico para la inyección de dependencia, mientras que el segundo expande sus funciones basadas en heredar la primera, como agregar funciones como propagación de eventos, acceso a recursos y acceso a mensajes internacionales. Este artículo presenta principalmente el ciclo de vida de los frijoles en dos contenedores ApplicationContext y BeanFactory.
Primero mira a la tabla de ciclo de vida:
Hablemos del ciclo de vida antes de hablar de ello:
La primavera solo nos ayuda a administrar el ciclo de vida completo de los frijoles modelo singleton. Para los prototipos de frijoles, Spring ya no administrará los ciclos de vida posteriores después de que se creen y se entreguen al usuario.
Método de anotación
Hay varias etapas al inicializar el frijol. Primero, puede usar la anotación @PostConstruct y @Predestroy para llamarlo en la etapa de creación y destrucción del frijol:
@ComponentPublic Class AnnotationBean {private final estático logger logger = loggerFactory.getLogger (annotationBean.class); @PostConstruct public void start () {logger.info ("AnnotationBean Start"); } @Predestroy public void destruye () {logger.info ("AnnotationBean Destroy"); }}Inicializando la interfaz de dispositivos desechables
También puede implementar las dos interfaces de InicializingBean y DisposableBean, que también se llaman durante las etapas de inicialización y destrucción:
@ServicePublic Class SpringLifeCyclesService implementa InitializingBean, DisposableBean {private final estático Logger logger = loggerFactory.getLogger (springLifeCyclesService.class); @Override public void AfterPropertIesset () lanza la excepción {logger.info ("springLifeCyclesService Start"); } @Override public void destruye () lanza la excepción {logger.info ("springLifecyclesService destruye"); }}Métodos de inicialización y destrucción personalizados
También puede personalizar métodos para llamar durante las etapas de inicialización y destrucción:
@ConfigurationPublic Class LifeCyCleconFig {@Bean (initMethod = "start", destruye = "destruir") public springlifecycle create () {springlifecycle springlifecycle = new SpringLifeCycle (); regresar springlifecycle; }} clase pública SpringLifecycle {private final estático logger logger = loggerFactory.getLogger (springLifecycle.class); public void start () {logger.info ("springlifecycle start"); } public void destruye () {logger.info ("SpringLifecycle Destroy"); }}Lo anterior está configurado en SpringBoot de esta manera, y también se puede usar si está basado en XML original:
<bean init-method = "start" destruye-method = "destruir"> </bean>
Para lograr el mismo efecto.
Implementar *interfaz consciente
*La interfaz consciente se puede usar para obtener algunos objetos en primavera al inicializar los frijoles, como obtener el contexto de resorte.
@ComponentPublic Class SpringLifecyCleAware implementa ApplicationContextAWee {private final de logger estático logger = loggerFactory.getLogger (springLifecyCleaware.class); application privateContext ApplicationContext; @Override public void setApplicationContext (ApplicationContext ApplicationContext) lanza Beansexception {this.ApplicationContext = ApplicationContext; Logger.info ("SpringLifecyCleaware Start"); }}De esta manera, el método SetApplicationContext se llamará en la inicialización de SpringLifecyCleaware Bean y se puede obtener el objeto ApplicationContext.
Procesador mejorado de BeanPostProcessor
Implemente la interfaz BeanPostProcessor. Todos los frijoles en primavera llamarán a dos métodos en la interfaz al inicializar, que se pueden usar para procesar algunos frijoles especiales:
@ComponentPublic Class SpringLifecycleProcessor implementa BeanPostProcessor {private final de logger estático logger = loggerFactory.getLogger (springLifecycleProcessor.class); / ** * llamado antes de la preinicialización * @param bean * @param beanName * @return * @throws beansexception */ @Override public object postprocessbeForeInitialization (object Bean, string beanName) arroja beansexception {if ("annotationBean" .equals (beanName) {logger.info ("springlifecycleStesor beanName = {} ", beanName); } return bean; } / ** * Inicialización de frijol posterior a la inicialización Llamada completa * @param bean * @param beanName * @return * @throws beanSexception * / @Override public objeto postProcesSafterInitialization (objeto bean, string beanName) lanza beanName = {} ", beanName); } return bean; }}Resultados de observación después de la ejecución:
018-03-21 00: 40: 24.856 [reinicedMain] INFO CCSPSPRINGLIFECYCLEPROCESOR-SpringLifecycleProcessor Start BeanName = AnnotationBean2018-03-21 00: 40: 24.860 [reinicedMain] Info ccspring.annotation.annotationBean-AnnotationBean 00: 40: 24.861 [reinicedMain] INFO CCSPSPRINGLIFECYCLEPROCESOR-SpringLifecycleProcessor End BeanName = AnnotationBean2018-03-21 00: 40: 24.864 [reiniciadoMania] info ccsaware.springlifecycleaware-springlifecycleAcleware start2018-218-03-1 00: 40: 24.867 [reinicedMain] INFO CCSPRING.SPRINGLIFECYCLESVICE-SpringLifecyClesService Start2018-03-21 00: 40: 24.887 [reinicedMani] Info ccspring.springlifecycle-springlifecycle start2018-03-21 00: 40: 25.062 OSBDAOPTIONALLIVERELOADSERVER-El servidor Livereload se ejecuta en el puerto 357292018-03-21 00: 40: 25.122 [reinicedMain] Info OSJeaannotationMBeanExporter-registrando frijoles para la exposición JMX en Startup2018-03-21 00: 40: 25.140 [reiniciarmain].] com.crossoverjie.Application-Se inició la aplicación en 2.309 segundos (JVM en ejecución para 3.681) 2018-03-21 00: 40: 25.143 [reinicedMain] Info Com.Crossoverjie.Application-Iniciar OK! 2018-03-21 00: 40: 25.153 [Thread-8] Info OsaNotationConfigapplicationConteContexcontex. org.springframework.context.annotation.annotationconfigapplicationcontext@3913adad: Fecha de inicio [miércoles 21 de marzo 00:40:23 CST 2018]; Raíz del contexto Jerarquía2018-03-21 00: 40: 25.155 [Thread-8] Info OsjeaannotationmBeanExporter-frijoles no registrados expuestos en JMX en el cierre2018-03-21 00: 40: 25.156 [Thread-8] info ccspring.springlifecycle-Springlifecycle Destroy2018-03-2118-03-21 00: 40: 25.156 [hilo-8] info ccservice.springlifecycleservice-springlifecycleservice destruye2018-03-21 00: 40: 25.156 [hilo-8] info ccspring.annotation.annotationbean-anotación beating destrucción
Hasta que se destruya el contexto de la primavera, se llamará a un método de destrucción personalizada y el método Destro () que implementa a disposición.
Resumir
Lo anterior es el ciclo de vida de Spring Bean introducido por el editor. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!