باعتباره الإطار الأكثر شعبية وقوة خفيفة الوزن في جافا ، رحب الربيع بحرارة من قبل المبرمجين. من الضروري جدًا فهم دورة حياة فول الربيع بدقة. عادة ما نستخدم ApplicationContext كحاوية زنبركية. هنا ، نتحدث أيضًا عن دورة حياة الفاصوليا في ApplicationContext. في الواقع ، فإن Beanfactory متشابه ، لكن المعالج يحتاج إلى تسجيل يدويًا.
1. مخطط تدفق دورة الحياة:
تبدأ دورة الحياة الكاملة لفاصوليا الربيع بإنشاء حاوية زنبركية حتى تدمر حاوية الربيع الفول في النهاية ، والتي تحتوي على سلسلة من النقاط الرئيسية.
إذا سجلت الحاوية الواجهات المختلفة أعلاه ، فسيتم تنفيذ البرنامج وفقًا للعملية أعلاه. سيتم شرح وظائف كل واجهة بالتفصيل أدناه.
2. تصنيف طرق الواجهة المختلفة
تخضع دورة الحياة الكاملة للفاصوليا إلى مكالمات مختلفة ، والتي يمكن تقسيمها إلى الفئات التالية:
1. طريقة الفول الخاصة: يتضمن ذلك الطرق التي يطلق عليها Bean نفسها والطرق المحددة من خلال Method-Method و Dorting Method في ملف التكوين.
2. طريقة واجهة دورة الحياة على مستوى الفاصوليا: يتضمن ذلك طرق واجهة مثل Beannameaware و Beanfactoryawar
3. طريقة واجهة دورة الحياة على مستوى الحاويات: يتضمن ذلك تطبيقين للواجهة: instantiationawareBostProcessor و BeanPostProcessor. يسمى فئة التنفيذ عمومًا "PostProcessor".
4. طريقة واجهة ما بعد المعالج المصنع: يتضمن ذلك SideJweAvingenabler و ConfigurationClassPostProcessor و CustomaUtowIreConfigurer وغيرها من طرق واجهة ما بعد المعالج المفيدة للغاية. معالجات ما بعد المصنع هي أيضا على مستوى الحاويات. اتصل مباشرة بعد تطبيق ملف تكوين تجميع السياق.
3. العرض التوضيحي
دعونا نوضح دورة حياة حبوب الربيع مع فول الربيع البسيط.
1. أولاً وقبل كل شيء ، إنها فول ربيعي بسيط ، والذي يطلق على أساليب الفاصوليا وطرق واجهة دورة الحياة على مستوى الفاصوليا. من أجل راحة العرض التوضيحي ، فإنه ينفذ أربع واجهات: Beannameaware و Beanfactoryaware و PitiveBean و DiposableBean. هناك طريقتان في نفس الوقت ، المقابلان لطائرة init وتدمير <Nivers <Bean> في ملف التكوين. على النحو التالي:
حزمة springbeantest ؛ استيراد org.springframework.beans.beansexception ؛ استيراد org.springframework.beans.factory.beanfactory org.springframework.beans.factory.disposablebean ؛ استيراد org.springframework.beans.factory.initializingbean ؛/** * Author qsk */public class شخص ينفذ beanfactoryaware ، beannamaware ، initializingbean ، التخلص من { عنوان السلسلة الخاص ؛ هاتف int الخاص ؛ Beanfactory Beanfactory ؛ سلسلة خاصة. Public Person () {system.out.println ("【Constructor】 استدعاء إنشاء منشئ الشخص") ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {system.out.println ("【السمة الحقن】 اسم السمة الحقن") ؛ this.name = name ؛ } السلسلة العامة getAddress () {return address ؛ } public void setAddress (عنوان السلسلة) {system.out.println ("【سمة الحقن】 عنوان سمة الحقن") ؛ this.address = العنوان ؛ } public int getPhone () {return phone ؛ } public void setphone (int phone) {system.out.println ("【regection endistribute】 regection entribute phone") ؛ this.phone = الهاتف ؛ } Override public string toString () {return "person [address =" + address + "، name =" + name + "، phone =" + phone + "]" ؛ }. this.beanfactory = arg0 ؛ }. this.beanname = arg0 ؛ }. } // هذه هي طريقة واجهة diposiblebean override public void Dorting () يلقي الاستثناء {system.out.println ("【واجهة diposiblebean】 استدعاء diposiblebean.destory ()") ؛ } // طريقة التهيئة المحددة من خلال خاصية init-method لـ <bean> public void myinit () {system.out.println ("【init-method】 استدعاء طريقة التهيئة المحددة بواسطة خاصية init-method <bean>") ؛ } // طريقة التهيئة المحددة بواسطة خاصية Method Destroy لـ <bean> public void myDestory () {system.out.println ("【تدمير method】 استدعاء طريقة التهيئة المحددة بواسطة خاصية تدمير الأساليب <bean>") ؛ }}2. التالي هو إظهار طريقة واجهة BeanPostProcessor ، على النحو التالي:
حزمة springbeantest ؛ استيراد org.springframework.beans.beansexte ؛ System.out.println ("هذا هو مُنشئ فئة تنفيذ BeanPostProcessor !!") ؛ // TODO TOD AUTO CONTRUCTOR CONCED} Override Public Object PostProcessAfterInitialization (Object Arg0 ، String Arg1) يلقي beansexception {system.out .println ( إرجاع Arg0 ؛ } Override الكائن العام postprocessbeforeinitialization (الكائن Arg0 ، String Arg1) يلقي beansexception {system.out .println ( إرجاع Arg0 ؛ }}كما ذكر أعلاه ، تتضمن واجهة BeanpostProcessor طريقتين بعد المعالجة والمعالجة بعد المعالجة. المعلمة الأولى من هاتين الطريقتين هي كائن الفول الذي سيتم معالجته ، والمعلمة الثانية هي اسم الفول. قيمة الإرجاع هي أيضًا كائن الفول الذي سيتم معالجته. انتبه هنا.
3. واجهة إنشاءات invantiationawareBostProcessor هي في الأساس واجهة فرعية من BeanPostProcessor. بشكل عام ، نرث محول محول فئة المحول ، محول EstantiationAwareBostProcessor المقدم من الربيع لاستخدامه ، على النحو التالي:
حزمة springbeantest ؛ استيراد java.beans.propertyDescriptor ؛ استيراد org.springframework.beans.beansextre myinstantiationawareBeanPostProcessor يمتد إلى إنشاء instantiationawarePostProcessorAdapter {public myinstantiationawareBeanPostProcessor () {super () ؛ System.out .println ("هذا هو إنشاء إنشاء فئة تنفيذ مثيلات. } // call Override public obserprocessbeforeinStantAntiation (الفئة بينكلاس ، سلسلة beanname) يرمي beansexception {system.out .println ( العودة لاغية. } // طريقة الواجهة ، call Override الكائن العام postprocessafterinitialization (كائن بين ، سلسلة beanname) يلقي beansexception {system.out .println ( عودة الفول }. إرجاع PVS ؛ }}هناك 3 طرق لهذا ، والطريقة الثانية ، بعد المعالجة. يتم استخدام الطريقة الثالثة ، PostProcessPropertyValues ، لتشغيل الخصائص ، ويجب أن تكون قيمة الإرجاع أيضًا كائنًا لخاصة PropertyValues.
4. إظهار طريقة واجهة ما بعد المعالج المصنع ، على النحو التالي:
حزمة springbeantest ؛ استيراد org.springframework.beans.beansexte org.springframework.beans.factory.config.configurablElistableBeanfactory ؛ الطبقة العامة myBeanFactoryPostProcessor تنفذ beanfactorypostprocessor {public mybeanfactorypostprocessor () {super () ؛ System.out.println ("هذا هو مُنشئ فئة تنفيذ BeanFactoryPostProcessor !!") ؛ } Override public void postprocessbeanfactory (configurableListableBeanfactory Arg0) يلقي beansexception {system.out .println ( BeanDefinition bd = arg0.getBeanDefinition ("person") ؛ bd.getPropertyValues (). addPropertyValue ("الهاتف" ، "110") ؛ }}5. ملف التكوين هو كما يلي beans.xml ، وهو أمر بسيط للغاية. عند استخدام ApplicationContext ، لا يلزم تسجيل المعالج يدويًا:
<؟ xmlns: p = "http://www.springframework.org/schema/p" XSI: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> <beanpostprocessor id = "instantiationAwareBeAnPostProcessor"> </bean> <bean id = "beanfactorypostprocessor"> </bean> <bean id = "person" init-method = "myinit" destroy-method = "mydestory" scope = "singleton
6. اختبر ما يلي:
حزمة springbeantest ؛ استيراد org.springframework.context.applicationContext ؛ استيراد org.springframework.context.support.classpathxmlapplicationcontext ApplicationContext Factory = جديد classpathxmlapplicationContext ("springbeantest/beans.xml") ؛ System.out.println ("تهيئة الحاوية بنجاح") ؛ // احصل على preson واستخدم الشخص = factory.getBean ("الشخص" ، person.class) ؛ system.out.println (شخص) ؛ system.out.println (شخص) ؛ System.out.println ("ابدأ أغلق الحاوية الآن!") ؛ ((classPathxMlapplicationContext) المصنع) .registerShutDownHook () ؛ }}أغلق الحاوية باستخدام طريقة الخطاف التي هي في الواقع مجردة applicationContext.
لنلقي نظرة على النتائج:
ابدأ في تهيئة الحاوية الآن 2014-5-18 15:46:20 org.springframework.context.support.abstractapplicationContext Informerefresh المعلومات: org.springframework.context.support.classpathxmlableCtive@19a0c7c. جذر السياق الهرمي 2014-5-18 15:46:20 org.springframework.beans.factory.xml.xmlbeandefinitionReader loadBeanDefinitions المعلومات: تحميل فئة XML من موارد المسار الفئة [SpringBeanTest/Beans.xml] ! BeanfactorypostProcessor استدعاء ما بعد المعالجة. ! هذا هو إنشاء مُنشئ فئة تطبيق التنفيذ! ! 2014-5-18 15:46:20 org.springframework.beans.factory.support.defaultlistableBeanfactory preinstantiatesingletonsinformation: pre-instantiating ingletons in org.springframework [BeanPostProcessor ، InstantiationAwareBeanPostProcessor ، BeanfactoryPostProcessor ، person] ؛ الجذر من الجذر من التسلسل الهرمي للتصنيع ، method method forevoreinstanttiation ، beannameaware.setbeanname () [واجهة beanfactoryaware] استدعاء beanfactoryaware.setBeanfactory () طريقة واجهة beanpostprocessor postprocessbeforeinitialization تغيير السمة! [initializationBean Interface] استدعاء initializingbean.afterPropertiesset () [init-method] استدعاء طريقة التهيئة المحددة بواسطة خاصية init-method من <bean> ، طريقة واجهة BeanPostProcessor بعد المعالجة. استنشاق instantiationAwareBeanPostProcessor يدعو طريقة ما بعد المعالجة. تتم تهيئة الحاوية بنجاح. الشخص [العنوان = guangzhou ، الاسم = Zhang San ، الهاتف = 110] ابدأ الآن في إغلاق الحاوية! 【واجهة dostiblebean】 استدعاء diposiblebean.destory () 【تدمير الأساليب】 استدعاء طريقة التهيئة المحددة من قبل خاصية تدمير <bean>
ما سبق هو عبارة عن مجموعة من المعلومات الواردة في دورة حياة جافا سبرينج بين. سنستمر في إضافة المعلومات ذات الصلة في المستقبل. شكرا لك على دعمك لهذا الموقع!