คำนำ
ในบทความก่อนหน้านี้มีการกล่าวถึงว่าผ่านอินเทอร์เฟซเช่นการเริ่มต้นเบียนและใช้แล้วทิ้งการดำเนินการที่กำหนดเองบางอย่างสามารถทำได้สำหรับการเริ่มต้นถั่วและการทำลายล้าง สิ่งหนึ่งที่ควรทราบคือมันเป็นเพียงการผ่าตัดหลังจากถั่วถูกสร้างอินสแตนซ์โดยคอนเทนเนอร์ ในโลกแห่งฤดูใบไม้ผลิหากคุณต้องการทำอะไรบางอย่างเกี่ยวกับกระบวนการสร้างอินสแตนซ์ในฐานะนักพัฒนาธุรกิจทั่วไปเห็นได้ชัดว่าคุณไม่จำเป็นต้องสืบทอดแอปพลิเคชันหรือการผลิต beanfactory เพราะคอนเทนเนอร์ฤดูใบไม้ผลิให้เรามีอินเทอร์เฟซบางอย่างทำให้เราสามารถขยายการดำเนินการเริ่มต้นของถั่ว
ซอร์สโค้ดแอบดู
การใช้งานนี้ง่ายมาก มีเพียงสองวิธี เราใช้ beanpostprocessor ของเราเองและฤดูใบไม้ผลิสามารถลงทะเบียนลงในคอนเทนเนอร์ได้โดยอัตโนมัติ
โดยที่วิธีการก่อนจะถูกดำเนินการหลังจากการสร้างอินสแตนซ์ถั่วหลังจากการตั้งค่าคุณสมบัติ แต่ก่อนวิธีการเริ่มต้น หลังจากวิธีการถูกดำเนินการหลังจากวิธีการเริ่มต้นต่างๆ
เมื่อพูดถึงสิ่งนี้บางคนอาจสงสัยว่าอะไรคือความแตกต่างระหว่างอินเทอร์เฟซการเริ่มต้นนี้กับการเริ่มต้นอื่น ๆ ในวงจรชีวิตคืออะไร? วิธีการเริ่มต้นอื่น ๆ ยังสามารถแก้ไขถั่วได้ คำถามนี้ดี มาพูดคุยเกี่ยวกับความแตกต่างที่สำคัญระหว่างอินเทอร์เฟซนี้และอินเทอร์เฟซที่ใช้แล้วทิ้งแบบใช้แล้ว
มีสอง BPPs พิเศษที่นี่ ฉันต้องบอกว่าถ้าคุณต้องการปรับแต่งคำอธิบายประกอบที่คล้ายกับ @autowire หรือฟังก์ชั่นการฉีดของ Inject (คุณอาจใช้ InjectionMetadata) BPPs ธรรมดาอาจไม่ตรงกับความต้องการของคุณและคุณอาจใช้ BPP พิเศษสองตัว
MergedBeanDefinitionPostProcessor (ต่อไปนี้จะเรียกว่า MBDPP)
InstantiationawareBeanPostProcessor (ต่อไปนี้จะเรียกว่า IABPP)
พวกเขาทั้งหมดสืบทอดมาจาก BPP แต่จุดเริ่มต้นในกระบวนการสร้างถั่วฤดูใบไม้ผลินั้นแตกต่างจาก BPP ทั่วไป
อินเทอร์เฟซ InstantiationawareBeanPostProcessor
ดูความคิดเห็น
วิธีการ postprocessbeforeinstantiation
ตรวจสอบวิธี CreateBean ของ AbstractAutoWireCapableBeanFactory (วิธีนี้เป็นวิธีหลักในการสร้างถั่วในภาชนะฤดูใบไม้ผลิ) คุณจะเห็นได้ว่า postprocessbeforeinstantiation คือก่อนการสร้างอินสแตนซ์ถั่ว postprocessafterinstantiation ถูกตั้งค่าหลังจากการสร้างอินสแตนซ์และก่อนการฉีดอัตโนมัติ โดยทั่วไปจะใช้ภายในในกรอบฤดูใบไม้ผลิ แต่มีศักยภาพที่ดีที่นี่ ใช้ postprocessbeforeinstantiation เพื่อสร้างวัตถุพร็อกซี (วิธีการทั่วไปคือการทำให้ postprocessorbeforeinstantiation Return ไม่ใช่ NULL ซึ่งจะขัดจังหวะกระบวนการที่ตามมาของการสร้างอินสแตนซ์ถั่ววัตถุที่ส่งคืนโดยวิธีนี้จะถูกใช้เป็นอินสแตนซ์ถั่ว) ดูซอร์สโค้ด:
วิธีการ PostprocessPropertyValues
ใช้ postprocessPropertyValues เพื่อดำเนินการต่างๆเกี่ยวกับคุณสมบัติการแยกวิเคราะห์ข้อมูลเมตาในคำอธิบายประกอบ ฯลฯ @Autowire ของ Spring, @Inject ของ JSR330 และ @Resource ของ JSR250 และการฉีดยาอื่น ๆ ทั้งหมดเสร็จสมบูรณ์ผ่านวิธีนี้
อินเทอร์เฟซนี้ใช้ในฤดูใบไม้ผลิและนักเรียนที่สนใจสามารถอ่านซอร์สโค้ดได้ ต่อไปนี้เป็นสองการใช้งานทั่วไป
AutoWiredannotationBeanPostProcessor
บทคัดย่อ
Interface MergedBeanDefinitionPostProcessor
อินเทอร์เฟซนี้ส่งผ่านใน rootbeanDefinition ซึ่งช่วยให้เราสามารถปรับเปลี่ยนคำจำกัดความของถั่ว @autuwiredannotationBeanPostProcessor ใช้วิธีนี้เพื่อตรวจสอบและลงทะเบียนสมาชิกที่ต้องฉีด
BeanFactoryPostProcessor (BFPP)
นอกจาก BeanPostProcessor แล้วยังมีอีกสิ่งหนึ่งที่ทุกคนรู้นั่นคือ BeanFactoryPostProcessor
BFPP เป็นปลั๊กอินส่วนขยายที่สำคัญสำหรับ beanfactory และสามารถปรับแต่งด้วย beandefinition ความแตกต่างที่สำคัญจาก BPP คือ:
โอเคหลังจากพูดมากลองดูที่ผังงานทั่วไปของการสร้างถั่วของฤดูใบไม้ผลิ เฉพาะโหนดที่สำคัญกว่าจะถูกทำเครื่องหมายไว้ที่นี่
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com