ความสัมพันธ์ระหว่างภาชนะถั่วกับสปริง
ข้อมูลการกำหนดค่าถั่วกำหนดการใช้งานและการพึ่งพาถั่ว สปริงคอนเทนเนอร์สร้างรีจิสทรีนิยามถั่วภายในคอนเทนเนอร์ตามข้อมูลการกำหนดค่าถั่วรูปแบบต่าง ๆ จากนั้นโหลดและอินสแตนติสถั่วตามรีจิสทรีและสร้างการพึ่งพาระหว่างถั่วและถั่ว ในที่สุดถั่วพร้อมเหล่านี้จะถูกวางไว้ในพูลแคชถั่วเพื่อให้แอปพลิเคชันภายนอกโทร
บทความนี้จะแนะนำรายละเอียดเกี่ยวกับการใช้วิธีการเข้ารหัสเพื่อกำหนดค่าถั่วแบบไดนามิกในฤดูใบไม้ผลิ เราจะแบ่งปันพวกเขาสำหรับการอ้างอิงและการเรียนรู้ของคุณ ฉันจะไม่พูดด้านล่างมากนักลองมาดูการแนะนำรายละเอียดด้วยกัน
1 DefaultListableBeanFactory
DefaultListableBeanFactory ใช้อินเทอร์เฟซ configurableListableBeanFactory ซึ่งสามารถฉีดถั่วผ่านคลาสนี้ได้ เพื่อให้แน่ใจว่าถั่วฉีดสามารถปรับปรุงได้โดย AOP เราจำเป็นต้องใช้อินเตอร์เฟสโพสต์โปรเซสเซอร์ของโรงงานของถั่ว
ถั่วที่ต้องใช้การฉีดแบบไดนามิก:
Bookservice ชั้นเรียนสาธารณะ {bookdao bookdao; โมฆะสาธารณะ setbookdao (bookdao bookdao) {this.bookdao = bookdao; } Public Bookdao getBookdao () {return bookdao; -การใช้อินเทอร์เฟซ Postprocessor ของโรงงานของถั่ว:
@ComponentPublic คลาส BookserviceFactoryBean ใช้ beanfactorypostprocessor {โมฆะสาธารณะ postprocessbeanfactory (configurableListableBeanfactory beanfactory) โยน beansexception // Bean Definition BEANDEFINITIONBUILDER BUILDER = BeanDefinitionBuilder.GenericBeandEfinition (Bookservice.class); // ตั้งค่า Property Builder.addPropertyReference ("Bookdao", "Bookdao"); // ลงทะเบียน Bean Definition Factory.RegisterBeandEfinition ("Bookservice1", Builder.getRawBeanDefinition ()); // ลงทะเบียน Bean Instance Factory.Registersingleton ("Bookservice2", ใหม่ net.deniro.spring4.dynamic.bookservice ()); -ที่นี่สันนิษฐานว่า bookdao ถูกฉีดเข้าไปในคอนเทนเนอร์ (วิธี XML หรือคำอธิบายประกอบ)
ที่นี่เราสามารถลงทะเบียนคำจำกัดความของถั่วหรือลงทะเบียนอินสแตนซ์ของถั่วโดยตรง
การกำหนดค่า:
<บริบท: Component-Scan base-package = "net.deniro.spring4.dynamic" />
การทดสอบหน่วย:
Bookservice Bookservice1 = (Bookservice) Context.getBean ("Bookservice1"); AssertNotNull (Bookservice1); AssertNotNull (Bookservice1.getBookdao ()); Bookservice Bookservice2 = (Bookservice) บริบท2 แท็กที่กำหนดเอง
เพื่อให้การห่อหุ้มส่วนประกอบที่ดีขึ้นและเพิ่มความสะดวกในการใช้งานเรากำหนดส่วนประกอบเป็นป้ายกำกับ
ขั้นตอนในการปรับแต่งแท็กคือ:
สร้าง Bookservice.xsd ภายใต้โฟลเดอร์ Schema ในทรัพยากร
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <xsd: schema xmlns = "http://www.deniro.net/schema/service" xmlns: xsd = "http://ww.w3.org/2001/2001/2001/2001/2001/2001/2001/2001 xmlns: beans = "http://www.springframework.org/schema/beans" targetNamespace = "http://www.deniro.net/schema/service" ElementFormDefault = "attributeFormDefault = namespace = "http://www.springframework.org/schema/beans"/> <!-กำหนดแท็กบริการหนังสือ-> <xsd: element name = "Book-Service"> <xsd: ComplexType> <xsd: attribute name = "dao" type = "xsd: string" use = "ต้องการ"/> </xsd: ส่วนขยาย> </xsd: complexContent> </xsd: complexType> </xsd: องค์ประกอบ> </xsd: schema> schema>
จากนั้นกำหนดตัวแยกวิเคราะห์แท็กบริการ:
Public Class BookserviceDefinitionParser ใช้ BeanDefinitionParser {Public Beandefinition Parse (องค์ประกอบองค์ประกอบ, parsercontext parsercontext) {// สร้าง bean reficientBeanDefinitionBuilder Builder = beanDefinitionBuilder.GenericBeAnDefinition // ฉีดแอตทริบิวต์แท็กที่กำหนดเองสตริง dao = element.getAttribute ("dao"); builder.addpropertyreference ("bookdao", dao); // ลงทะเบียนถั่วกำหนด parsercontext.registerBeanComponent (ใหม่ BeanComponentDefinition (Builder .getRawBeanDefinition (), "Bookservice")); คืนค่า null; -จากนั้นลงทะเบียนตัวแยกวิเคราะห์ที่คุณเพิ่งกำหนดไว้ในเนมสเปซ:
Public Class BookserviceNamespaceHandler ขยาย NamespaceHandlersupport {โมฆะสาธารณะ init () {registerBeanDefinitionParser ("บริการหนังสือ", ใหม่ BookserViceDefinitionParser ()); -จากนั้นสร้างโฟลเดอร์ Meta-Inf ในทรัพยากรและสร้าง Spring.schemas และ Spring.handlers ซึ่งใช้ในการกำหนดค่าเส้นทางไฟล์โครงสร้างเอกสารของแท็กที่กำหนดเองและตัวแยกวิเคราะห์ที่วิเคราะห์เนมสเปซแบบกำหนดเอง
เส้นทางไฟล์
Spring.handlers:
http/: //www.deniro.net/schema/service=net.deniro.spring4.dynamic.bookservicenamespaceHandler
Spring.schemas:
http/: //www.deniro.net/schema/service.xsd=schema/bookservice.xsd
หมายเหตุ: ไฟล์ XSD จะต้องถูกวางไว้ในไดเรกทอรี Descendants ของทรัพยากร
อ้างถึงแท็กที่กำหนดเอง:
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org/2001/xml xmlns: me = "http://www.deniro.net/schema/service" xsi: schemalocation = "http://www.springframework.org/schema/beans http://ww.springframeworkwork http://www.deniro.net/schema/service http://www.deniro.net/schema/service.xsd "> <bean id =" bookdao "/> <ฉัน: book-service dao =" bookdao "/>
ที่นี่เราอ้างอิงแท็กที่กำหนดเองที่หัวและตั้งชื่อมันว่า "ฉัน" แล้วเราสามารถใช้มัน o (∩_∩) o ~
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com