Vorwort
Der IOC -Container von Spring ist sehr leistungsfähig und verantwortlich für die Erstellung und das Management von Frühlingsbohnen und anderen Funktionen. Frühlingsbohnen sind ein wichtiger Bestandteil der gesamten Frühlingsanwendung. Das Verständnis des Lebenszyklus von Frühlingsbohnen wird uns den gesamten Frühlingsrahmen verstehen.
Beanfactory und ApplicationContext sind zwei wichtige Frühlingscontainer. Ersteres bietet die grundlegendste Unterstützung für die Abhängigkeitsinjektion, während Letztere seine Funktionen basierend auf der Erben ersteren erweitert, z. B. Funktionen wie Ereignisausbreitung, Ressourcenzugriff und internationalen Nachrichtenzugriff. In diesem Artikel wird hauptsächlich den Lebenszyklus von Bohnen in zwei Containern eingereicht, und beanfaktorisch.
Schauen Sie sich zunächst die Lebenszyklus -Tabelle an:
Lassen Sie uns über den Lebenszyklus sprechen, bevor wir darüber sprechen:
Frühling hilft uns nur, den vollen Lebenszyklus von Singleton -Modellbohnen zu verwalten. Bei Prototypen Beans verwaltet der Frühling nachfolgende Lebenszyklen nicht mehr, nachdem sie an den Benutzer erstellt und übergeben wurden.
Annotationsmethode
Bei der Initialisierung der Bohne gibt es mehrere Phasen. Erstens können Sie die Annotation @Postconstruct und @Predestroy verwenden, um sie in der Erstellung und Zerstörung der Bean zu nennen:
@ComponentPublic Class AnnotationBean {private endgültige statische Logger logger = loggerfactory.getLogger (AnnotationBean.Class); @Postconstruct public void start () {logger.info ("AnnotationBean start"); } @Predestroy public void Destroy () {logger.info ("AnnotationBean Destroy"); }}Initialisierungsbean, DisposableBean -Schnittstelle
Sie können auch die beiden Schnittstellen von Initialisierungsbean und DisposableBean implementieren, die auch während der Initialisierungs- und Zerstörungsstadien aufgerufen werden:
@ServicePublic Class SpringLifeCyCleerservice implementiert Initialisierungsbean, DisposableBean {private endgültige statische Logger logger = loggerfactory.getLogger (SpringLifecycleService.class); @Override public void AfterPertieStieSt () löst Ausnahme aus (logger.info ("SpringLifecycleService Start"); } @Override public void destroy () löst Ausnahme aus {logger.info ("SpringLifecycleService Destroy"); }}Benutzerdefinierte Initialisierung und Zerstörungsmethoden
Sie können auch Methoden zum Aufrufen während der Initialisierungs- und Zerstörungsstadien anpassen:
@ConfigurationPublic Class LifeCycleConfig {@Bean (initMethod = "start", DestroyMethod = "Destroy") public SpringLifecycle create () {SpringLifecycle SpringLifeCycle = new SpringLifecycle (); Rückkehr SpringLifecycle; }} öffentliche Klasse SpringLifecycle {private endgültige statische Logger logger = loggerfactory.getLogger (SpringLifecycle.Class); public void start () {logger.info ("SpringLifecycle start"); } public void destroy () {logger.info ("SpringLifecycle Destroy"); }}Das obige ist auf diese Weise in Springboot konfiguriert und kann auch verwendet werden, wenn es original XML-basiert ist:
<bean init-method = "start" destoce-method = "destroy"> </bean>
den gleichen Effekt erzielen.
Implementieren Sie *AUWARE Interface
*Die bewusstete Schnittstelle kann verwendet werden, um beim Initialisieren von Bohnen einige Objekte im Feder zu erhalten, z. B. den Federkontext.
@ComponentPublic Class SpringLifeCyCleaWare implementiert ApplicationContextaware {private endgültige statische Logger logger = loggerfactory.getLogger (SpringLifecyCleaWare.class); private applicationContext applicationContext; @Override public void setApplicationContext (ApplicationContext applicationContext) löst beansexception {this.applicationContext = ApplicationContext; Logger.info ("SpringLifecyCleaWare start"); }}Auf diese Weise wird die SetApplicationContext -Methode bei der Initialisierung von SpringLifeCyCleaWare -Bean aufgerufen und das ApplicationContext -Objekt kann erhalten werden.
BeanpostProcessor Enhanced Processor
Implementieren Sie die BeanPostProcessor -Schnittstelle. Alle Bohnen im Frühling rufen beim Initialisieren zwei Methoden in der Schnittstelle auf, mit denen einige spezielle Bohnen verarbeitet werden können:
@ComponentPublic Class SpringLifeCycleProcessor implementiert BeanPostProcessor {private endgültige statische Logger logger = loggerfactory.getLogger (SpringLifeCycleProcessor.class); / ** * Vor der Vorinitialisierung angerufen * @param bean * @param beanname * @return * @throw beansexception */ @Override public Object postProcessBeforialization (Objektbean, String BeAnName) wirft Beansexception ("AnnotationBean". BeAnName = {} ", Beanname); } zurückbean; } / ** * Post-Initialisierung Bean Initialisierung vollständiger Anruf * @param bean * @param beanname * @return * @throw beansexception * / @Override public Object Postprozessafterinitialisierung (Objektbean, String beanname) wirft Beansexception {if ("AnnotationBean". Logger.info ("SpringLifecycleProcessor end beanname = {}", Beanname); } zurückbean; }}Beobachtungsergebnisse nach der Ausführung:
018-03-21 00: 40: 24.856 [NeustartedMain] Info CCSPSPRINGLIfeCycleProcessor-SpringLifecycleProcessor Start Beanname = AnnotationBean2018-03-21 00: 40: 24.860 [RestartedMain] Info CCSPRING.Annotation. start2018-03-21 00: 40: 24.861 [restartedMain] Info ccspingLifecycleProcessor-SpringLifecycleProcessor End BeAnName = AnnotationBean2018-03-21 00: 40: 24.864 [RestartedMain] Info. start2018-03-21 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 - Started Application in 2.309 seconds (JVM running for 3.681)2018-03-21 00:40:25.143 [restartedMain] INFO com.crossoverjie.Application - start ok!2018-03-21 00:40:25.153 [Thread-8] INFO oscaAnnotationConfigApplicationContext - Schließen org.springframework.context.annotation.annotationConfigapplicationContext@3913adad: Start -up -Datum [Mi 21. März 00:40:23 CST 2018]; Wurzel des Kontextes Hierarchy2018-03-21 00: 40: 25.155 [Thread-8] Info OsjeaAntationMbeanExporter-Unregistrierende JMX-exponierte Bohnen bei Shutdown2018-03-21 00: 40: 25.156 [Thread-8] Info ccsspring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring. 00: 40: 25.156 [Thread-8] Info ccService.springlifecykleservice-SpringLifeCyCleerservice Destroy2018-03-21 00: 40: 25.156 [Thread-8] Info ccSpring.Annotation
Bis zum Frühlingskontext wird eine benutzerdefinierte Zerstörungsmethode und die Districle () -Methode, die DisposableBean implementiert, aufgerufen werden.
Zusammenfassen
Das obige ist der vom Herausgeber eingeführte Frühlingsbohnen -Lebenszyklus. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!