مقدمة
تعد حاوية IOC الخاصة بـ Spring قوية للغاية ومسؤولة عن إنشاء وإدارة حبوب الربيع وغيرها من الوظائف. تعتبر حبوب الربيع جزءًا مهمًا من تطبيق الربيع بأكمله. إن فهم دورة حياة حبوب الربيع سيكون مفيدًا للغاية بالنسبة لنا فهم إطار الربيع بأكمله.
Beanfactory و ApplicationContext هما حاوية مهمة من الربيع. يوفر السابق الدعم الأساسي لحقن التبعية ، بينما يوسع الأخير وظائفه بناءً على وراثة الأولى ، مثل إضافة وظائف مثل انتشار الأحداث والوصول إلى الموارد والوصول الدولي للرسائل. تقدم هذه المقالة بشكل أساسي دورة حياة الفاصوليا في اثنين من الحاويات ApplicationContext و Beanfactory.
انظر أولاً إلى مخطط دورة الحياة:
دعونا نتحدث عن دورة الحياة قبل أن نتحدث عنها:
الربيع يساعدنا فقط على إدارة دورة الحياة الكاملة لفاصوليا طراز Singleton. بالنسبة للفاصوليا النموذجية ، لن تدير Spring دورات الحياة اللاحقة بعد إنشاءها وتسليمها إلى المستخدم.
طريقة التعليقات التوضيحية
هناك عدة مراحل عند تهيئة الفول. أولاً ، يمكنك استخدام التعليقات التوضيحية postconstruct و predestroy للاتصال بها في مرحلة الخلق والتدمير في الفول:
componentpublic class annotationbean {private final static logger = loggerfactory.getLogger (enrotationbean.class) ؛ postconstruct public void start () {logger.info ("includebean start") ؛ } predestroy public void dorder () {logger.info ("enrotationBean Dorting") ؛ }}التهيئة ، واجهة DiversableBean
يمكنك أيضًا تنفيذ واجهتين من initializingBean و DiscipableBean ، والتي تسمى أيضًا خلال مراحل التهيئة والدمار:
servicepublic class springlifecycleservice تنفذ initializingBean ، dispiableBean {private final static logger = loggerfactory.getLogger (springlifecycleservice.class) ؛ Override public void بعد propertiesset () يلقي الاستثناء {logger.info ("springlifecycycleservice start") ؛ } Override public void Dride () يلقي الاستثناء {logger.info ("springlifecycycleservice تدمير") ؛ }}طرق التهيئة والدمار المخصصة
يمكنك أيضًا تخصيص طرق للاتصال أثناء مراحل التهيئة والدمار:
ConfigurationPublic Class Lifecycycleconfig {bean (initMethod = "start" ، destRymethod = "DestRey") publiclifecycle create () {springlifecycle springlifecycle = new springlifecycle () ؛ العودة springlifecycle. }} الفئة العامة springlifecycle {private final static logger = loggerfactory.getLogger (springlifecycle.class) ؛ public void start () {logger.info ("springlifecycle start") ؛ } public void destroy () {logger.info ("springlifecycle Dorting") ؛ }}تم تكوين ما ورد أعلاه في Springboot بهذه الطريقة ، ويمكن أيضًا استخدامه إذا كان مستندًا إلى XML الأصلي:
<bean init-method = "start" تدمير method = "Destroy"> </bean>
لتحقيق نفس التأثير.
تنفيذ *الواجهة المدركة
*يمكن استخدام الواجهة المدركة للحصول على بعض الكائنات في فصل الربيع عند تهيئة الفاصوليا ، مثل الحصول على سياق الربيع.
ComponentPublic Class SpringLifecyClearware تنفذ ApplicationContextAware {Private Final Static Logger = loggerFactory.getLogger (SpringLifecyCleware.Class) ؛ application applicationcontext applicationContext ؛ Override public void setapplicationContext (ApplicationContext ApplicationContext) يلقي beansexception {this.applicationContext = ApplicationContext ؛ logger.info ("springlifecycleware start") ؛ }}وبهذه الطريقة ، سيتم استدعاء طريقة setApplicationContext في تهيئة حبة springlifecycleware ويمكن الحصول على كائن ApplicationContext.
BeanpostProcessor معالج محسّن
تنفيذ واجهة BeanPostProcessor. ستدعو جميع الفاصوليا في فصل الربيع طريقتين في الواجهة عند التهيئة ، والتي يمكن استخدامها لمعالجة بعض الفاصوليا الخاصة:
ComponentPublic Class SpringLifecyCleprocessor تنفذ beanpostprocessor {private final static logger = loggerfactory.getLogger (springlifecycleprocessor.class) ؛ / ** * استدعاء قبل ما قبل initialization * param bean * param beanname * regurn * throws beansexception */ override كائن عام postprocessbeforeInitialization (كائن بين ، سلسلة beanname) يلقي beansexception {if ("annotationbean". beanname = {} "، beanname) ؛ } إرجاع الفول ؛ } / ** * تهيئة الفاصوليا بعد التهيئة ، مكالمة كاملة * param bean * param beanname * return * throws beansexception * / Override كائن postprocessafterinitial beanname = {} "، beanname) ؛ } إرجاع الفول ؛ }}نتائج المراقبة بعد التنفيذ:
018-03-21 00: 40: 24.856 [RESTARTEDMAIN] INFO CCSPSPRINGLIFECYCLEPROCESSS-SPRINGLIFECYCLEPROCESS 00: 40: 24.861 [RESTARTEDMAIN] Info CCSPSPRINGLIFECYCLEProcessor-SpringLifecyCleprocessor End Beanname = annotationBean2018-03-21 00: 40: 24.864 [RESTARTEDMAIN] info 00: 40: 24.867 [RESTARTEDMAIN] info ccspring.springlifecycleservice-springlifecycleservice start2018-03-21 00: 40: 24.887 [RESTARTEDMAIN] info OsbdaoptionAllivereloadserver-خادم Livereload يعمل على المنفذ 357292018-03-21 00: 40: 25.122 [RESTARTEDMAIN] معلومات OSJEAANNOTATINGEMENEXPORER-تسجيل الفاصوليا للتعرض JMX على بدء التشغيل 2018-03-21 00: 40: 25.140 com.crossoverjie.application-بدأ التطبيق في 2.309 ثانية (JVM يعمل لمدة 3.681) 2018-03-21 00: 40: 25.143 [RESTARTMAIN] info com.crossoverjie.inflication-inclablication Consisting-Consing-Consisting-88 org.springframework.context.annotation.annotationConfigapplicationContext@3913adad: تاريخ بدء التشغيل [الأربعاء 21 مارس 00:40:23 CST 2018] ؛ جذر السياق الهرمي Hierarchy2018-03-21 00: 40: 25.155 [Thread-8] info osjeaannotationmbeanexporter-ungistering jmx-appeted beans on stapdown2018-03-21 00: 40: 25.156 [thread-8] info ccspring. 00: 40: 25.156 [Thread-8] info ccservice.springlifecycycleservice-SpringLifecycleservice Destroy2018-03-21 00: 40: 25.156 [Thread-8] info
حتى يتم تدمير سياق الربيع ، سيتم استدعاء طريقة تدمير مخصصة وطريقة تدمير () التي تنفذ قابلية التخلص.
لخص
ما سبق هو دورة حياة الفول الربيع التي أدخلها المحرر. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!