ฤดูใบไม้ผลิให้บริการ postprocessors จำนวนมากสำหรับนักพัฒนาที่จะขยายเช่น beanpostprocessor, beanfactorypostprocessor, beanvalidationpostprocessor และ postprocessors อื่น ๆ วิธีการใช้งานส่วนใหญ่คล้ายกัน ทำความเข้าใจกับหนึ่งในนั้นและเชี่ยวชาญวิธีการใช้งานของพวกเขาและอื่น ๆ สามารถเข้าใจได้ด้วยการเปรียบเทียบ
ที่นี่เราใช้ BeanPostProcessor เป็นตัวอย่างเพื่อแสดงวิธีการใช้งาน
อินเตอร์เฟส BeanPostProcessor มีสองวิธีสำหรับนักพัฒนาในการปรับแต่ง: postprocessbeforeinitialization และ postprocessafterinitialization
Postprocessbeforeinitialization: วิธีนี้ส่วนใหญ่สำหรับฤดูใบไม้ผลิเพื่อปรับแต่งกระบวนการก่อนที่จะเรียกใช้วิธีการเริ่มต้นเมื่อเริ่มต้นถั่ว
Postprocessafterinitialization: วิธีนี้ส่วนใหญ่สำหรับฤดูใบไม้ผลิเพื่อปรับแต่งกระบวนการหลังจากเรียกใช้วิธีการเริ่มต้นเมื่อเริ่มต้นถั่ว
รหัสตัวอย่าง:
/** * ทดสอบถั่ว */แคทคลาสสาธารณะ {ชื่อสตริงส่วนตัว; อายุ int ส่วนตัว; โมฆะสาธารณะพูด () {system.out.println ("ชื่อ:" + ชื่อ); System.out.println ("อายุ:" + อายุ); } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } public int getage () {return Age; } การตั้งค่าโมฆะสาธารณะ (อายุ int) {this.age = อายุ; - /*** postprocessor ที่กำหนดเอง*/คลาสสาธารณะ catbeanpostprocessor ใช้ beanpostprocessor {@nullable @Override วัตถุสาธารณะ postprocessialization (Object Bean, String Beanname) โยน beansexception cat.say (); คืนถั่ว; } return bean; } @Nullable @Override วัตถุสาธารณะ postprocessafterInitialization (Object Bean, String Beanname) พ่น beansexception {ถ้า (ถั่วอินสแตนซ์ของแมว) {// แก้ไขค่าแอตทริบิวต์และส่งคืนแมว = (แมว) ถั่ว; cat.setName ("Hello Maomi"); cat.setage (3); คืนแมว; } return bean; - /** * เรียกใช้ */คลาสสาธารณะรัน {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ApplicationContext ApplicationContext = ใหม่ classPathxMlapplicationContext ("Spring-Bean.xml"); cat cat = (cat) applicationcontext.getBean ("cat"); cat.say (); -ข้อมูลการกำหนดค่า XML
<!-กำหนดค่าถั่วและเริ่มต้น-> <bean id = "cat"> <property name = "name" value = "hellokitty" /> <property name = "age" value = "1" /> </ebean> <bean id = "catbeanPostProcessor"
ผลลัพธ์ผลลัพธ์:
ชื่อ: Hellokitty
อายุ: 1
ชื่อ: สวัสดี Maomi
อายุ: 3
คุณจะเห็นว่าข้อมูลถั่วที่ประมวลผลผ่านตัวประมวลผลมีการเปลี่ยนแปลง สุดท้ายลองมาดูวิธีเรียกใช้การใช้งานที่กำหนดเองในซอร์สโค้ด
ในวิธีการเริ่มต้นถั่ว: AbstractautowirecapableBeanFactory.java
/** * การเริ่มต้นถั่ว */วัตถุที่ได้รับการป้องกันการเริ่มต้นเบียน (สตริงสุดท้าย BeanName, Object Bean, @Nullable RootBeanDefinition MBD) {// ละเว้นส่วนหนึ่งของวัตถุรหัสที่ไม่เกี่ยวข้อง wrappedBean = ถั่ว; // ก่อนการเริ่มต้นถ้า (mbd == null ||! mbd.issynthetic ()) {wrappedBean = ApplyBeanPostProcessorsoration ก่อนหน้า (WrappedBean, BeanName); } ลอง {// การเรียกใช้วิธีการเริ่มต้นเพื่อเริ่มต้นถั่ว InvokeInitMethods (BeanName, WrappedBean, MBD); } catch (throwable ex) {โยน beancreationexception ใหม่ ((mbd! = null? mbd.getResourcedescription (): null), Beanname, "การเรียกใช้วิธีการเริ่มต้นล้มเหลว", Ex); } // ถ้า (mbd == null ||! mbd.issynthetic ()) {wrappedBean = ApplyBeanPostProcessorsaFterInitialization (WrappedBean, BeanName); } return wrappedbean; } // วิธีการ postprocessBeforeInitialization เรียก @Override วัตถุสาธารณะ ApplyBeanPostProcessorsorization (วัตถุที่มีอยู่ในใจ, สตริงถั่ว) พ่น beansexception {object result = enbileingbean; สำหรับ (BeanPostProcessor BeanProcessor: getBeanPostProcessors ()) {// เรียกว่า postprocessbeforeinitialization วิธีการกำหนดค่าวัตถุปัจจุบัน = beanprocessor.postprocessbeforeinitialization (ผลลัพธ์, Beanname); if (current == null) {ผลลัพธ์ส่งคืน; } result = ปัจจุบัน; } ผลตอบแทนผลลัพธ์; } // postprocessafterinitialization วิธีการโทร @Override วัตถุสาธารณะ ApplyBeanPostProcessorsaFterInitialization (วัตถุที่มีอยู่ในใจ, สตริง BeanName) พ่น beansexception {object result = enbieringbean; สำหรับ (BeanPostProcessor BeanProcessor: GetBeanPostProcessors ()) {// วิธีการที่กำหนดเอง postprocessafterinitialization วิธีการเรียกวัตถุกระแส = beanProcessor.postProcessafterInitialization (ผลลัพธ์, BeanName); if (current == null) {ผลลัพธ์ส่งคืน; } result = ปัจจุบัน; } ผลตอบแทนผลลัพธ์; -ข้างต้นคือกระบวนการโทรของฤดูใบไม้ผลิเพื่อใช้วิธีการที่กำหนดเอง ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น