يوفر Spring العديد من المعالجات لما بعد المعالجة للمطورين للتوسع ، مثل BeanPostprocessor و BeanfactoryPostProcessor و BeanValidationPostProcessor وغيرها من المعالجات. معظم أساليب استخدامهم متشابهة. فهم أحدهم وإتقان أساليب استخدامه ، ويمكن فهم الآخرين من خلال القياس.
هنا نستخدم BeanPostProcessor كمثال لإظهار كيفية استخدامه.
توفر واجهة BeanPostProcessor طريقتين للمطورين للتخصيص: تحطيم ما بعد المعالجة و postprocessafterinitialization.
PostProcessBeforeInitialization: هذه الطريقة هي بشكل أساسي لفصل الربيع لتخصيص العملية قبل استدعاء طريقة التهيئة عند تهيئة الفول.
PostprocessAfterInitialization: هذه الطريقة هي بشكل أساسي لفصل الربيع لتخصيص العملية بعد استدعاء طريقة التهيئة عند تهيئة الفول.
نموذج الرمز:
/** * اختبار Bean */Public Class Cat {Private String Name ؛ عصر INT الخاص ؛ public void say () {system.out.println ("name:" + name) ؛ System.out.println ("العمر:" + العمر) ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } public int getage () {return Age ؛ } public void setage (int age) {this.age = age ؛ }} /*** Custom PostProcessor*/public class catbeanpostprocessor تنفذ beanpostprocessor {nullable @override الكائن العام postprocessbeforeInitialization (كائن فول ، سلسلة beanname) يلقي beansexception {if (مثيل الفول من cat) {// إخراج cat cat attribute الأصلي = cat) ؛ cat.say () ؛ عودة الفول } إرجاع الفول ؛ } @nullableborride كائن عام postprocessafterinitialization (كائن فول ، سلسلة beanname) يلقي beansexception {if (bean eastyof cat) {// تعديل قيمة السمة و cat cat = (cat) Bean ؛ Cat.SetName ("Hello Maomi") ؛ cat.setage (3) ؛ إرجاع القط } إرجاع الفول ؛ }} /** * Run */public Class Run {public static void main (string [] args) {applicationContext ApplicationContext = new ClassPathxMlableCtionContext ("spring-bean.xml") ؛ CAT CAT = (CAT) ApplicationContext.getBean ("Cat") ؛ cat.say () ؛ }}معلومات التكوين XML
<!-تكوين الفول وتهيئة-> <bean id = "cat"> <property name = "name" value = "hellokitty" /> <property name = "Age"
نتيجة الإخراج:
الاسم: Hellokitty
العمر: 1
الاسم: مرحبا مامي
العمر: 3
يمكنك أن ترى أن معلومات الفول التي تمت معالجتها من خلال Postprocessor قد تغيرت. أخيرًا ، دعنا نلقي نظرة على كيفية استدعاء التطبيقات المخصصة في الكود المصدري.
في طريقة التهيئة بين الفول: الملخصية
/** * التهيئة بين الحبة */كائن محمي initializeBean (السلسلة النهائية ، فول الكائن النهائي ، @nullable rootbeandefinition mbd) {// حذف جزء من كائن الكود غير ذي صلة rappedbean = bean ؛ // قبل التهيئة if (mbd == null ||! mbd.issynthetic ()) {redbean = applicBeanPoStProcsorSbeforeInitialization (RappedBean ، beanname) ؛ } جرب {// استدعاء طريقة التهيئة لتهيئة Bean InvokeInitMethods (Beanname ، RappedBean ، MBD) ؛ } catch (throwable ex) {رمي beancreationException جديد ((mbd! = null؟ mbd.getResourcedescription (): null) ، beanname ، "فشل استدعاء طريقة init" ، على سبيل المثال) ؛ } // if (mbd == null ||! mbd.issynthetic ()) {rappeBean = applicBeanPostProcsorSafterInitialization (RappedBean ، beanname) ؛ } الإرجاع ملفوف ؛ } // طريقة postprocessbeforeInitialization تستدعي Override كائن عام applicBeanPostProcessBoreForeInitialization (الكائن الحالي ، string beanname) يلقي beansexception {object result = nerentBean ؛ لـ (BeanPostProcessor BeanProcessor: getBeanPostProcessors ()) {// استدعاء طريقة ما بعد المعالجة المخصصة للكائنات الحالية = beanprocessor.postProcessBeforeInitialization (النتيجة ، beanname) ؛ if (current == null) {return return ؛ } النتيجة = التيار ؛ } نتيجة الإرجاع ؛ }. لـ (BeanPostProcessor BeanProcessor: getBeanPostProcessors ()) {// custom postprocessafterinitializial method consure current = BeanProcessor.PostProcessAfterInitialization (result ، beanname) ؛ if (current == null) {return return ؛ } النتيجة = التيار ؛ } نتيجة الإرجاع ؛ }ما سبق هو عملية استدعاء الربيع لتنفيذ أساليب مخصصة. آمل أن يكون ذلك مفيدًا لتعلم الجميع ، وآمل أن يدعم الجميع wulin.com أكثر.