Hubungan antara kacang dan wadah musim semi
Informasi Konfigurasi Kacang Menentukan implementasi dan dependensi kacang. Spring Container menetapkan registri definisi kacang di dalam wadah berdasarkan berbagai bentuk informasi konfigurasi kacang, kemudian memuat dan membuat instantiates kacang sesuai dengan registri, dan menetapkan dependensi antara kacang dan kacang. Akhirnya, kacang siap ini ditempatkan di kumpulan cache kacang untuk dihubungi oleh aplikasi eksternal.
Artikel ini akan memperkenalkan Anda secara rinci tentang penggunaan metode pengkodean untuk mengonfigurasi kacang secara dinamis di musim semi. Kami akan membagikannya untuk referensi dan pembelajaran Anda. Saya tidak akan mengatakan banyak hal di bawah ini, mari kita lihat perkenalan terperinci bersama.
1 DefaultListableBeanFactory
DefaultListableBeanFactory mengimplementasikan antarmuka ConfigurableListableBeanFactory, yang secara dinamis dapat menyuntikkan kacang melalui kelas ini. Untuk memastikan bahwa kacang yang disuntikkan juga dapat ditingkatkan oleh AOP, kita perlu mengimplementasikan antarmuka postprocessor Pabrik Bean's BeanfactoryPostProcessor.
Kacang yang membutuhkan injeksi dinamis:
Public Class Bookservice {bookdao bookdao; public void setbookdao (bookdao bookdao) {this.bookdao = bookdao; } public bookdao getBookdao () {return bookdao; }}Menerapkan antarmuka postprocessor pabrik dari kacang:
@ComponentPublic Class bookserviceFactoryBean mengimplementasikan beanfactorypostprocessor {public void postprocessbeanfactory (configurableListableBeanFactory beanfactory) melempar beansException {defaultListableBeanFactory factory = (defaultListableBeanfacpory {defaultListable) factoryfactory = (defaultListableBeanfacpory {DefaultListable) // Definisi Bean BeandefinitionBuilder Builder = beandefinitionBuilder.genericbeandefinition (bookservice.class); // atur properti builder.addpropertyreference ("bookdao", "bookdao"); // Register Bean Definition factory.RegisterBeandefinition ("Bookservice1", builder.getrawbeandefinition ()); // Daftarkan Bean Instance factory.registersingleton ("Bookservice2", net.deniro.spring4.dynamic.bookservice ()); }}Di sini diasumsikan bahwa bookdao telah disuntikkan ke dalam wadah (XML atau metode anotasi).
Di sini, kita dapat mendaftarkan definisi kacang atau secara langsung mendaftarkan contoh kacang.
Konfigurasi:
<konteks: komponen-scan-package = "net.deniro.spring4.dynamic" />
Tes unit:
BookService bookService1 = (BookService) context.getBean("bookService1");assertNotNull(bookService1);assertNotNull(bookService1.getBookDao());bookService bookService2 = (BookService) context.getBean("bookService2");assertNotNull(bookService2);2 tag khusus
Untuk merangkum komponen dan meningkatkan kemudahan penggunaannya, kami mendefinisikan komponen sebagai label.
Langkah -langkah untuk menyesuaikan tag adalah:
Buat BookserService.xsd di bawah folder skema di Sumber Daya
<? XML Versi = "1.0" encoding = "UTF-8"?> <xsd: schema xmlns = "http://www.deniro.net/schema/service" xmlns: xsd = "http://www.w3.org/2001/ xmlns: beans = "http://www.springframework.org/schema/beans" targetnamespace = "http://www.deniro.net/schema/service" elementformdefault = "kualifikasi" attributeFormDefault = "ucpualified"> <namsport "nequalified =" ucpualified "> <jualify" neMruteFormDefault = "ucpualified"> <namsport "—SqualpaRiFied"> <! namespace = "http://www.springframework.org/schema/beans"/> <!-Tentukan tag layanan buku-> <xsd: name elemen = "layanan buku"> <xsd: complextype> <xsd: complexcontent> <xsd: extension base = "beans =" beans = "beans =" complexcontent> <xsd: extension base = "beans =" beans = "beans =" identifikasi: complexcontent> <xsd: extension base = "beans =" beans = "beans =" identifikasi: complexcontent> <xsd: extension base = "beans =" beans = "BEANSD: COLLOWSDETTENT" <xsd: name atribut = "dao" type = "xsd: string" use = "wajib"/> </xsd: extension> </xsd: complexcontent> </xsd: complextype> </xsd: element> </xsd: schema>
Kemudian tentukan parser tag layanan:
Public Class BookServicedEfInitionParser mengimplementasikan beandefinitionparser {public beandefinition parse (elemen elemen, parsercontext parsercontext) {// create bean definitionBeandefinitionBuilder builder = beandefinitionBuilder.genericbeanDefinition.Ickerervice. // suntikkan atribut tag khusus string dao = element.getAttribute ("dao"); builder.addpropertyreference ("bookdao", dao); // Register Bean Define Parsercontext.RegisterBeanComponent (new BeanComponentDefinition (builder .getrawbeandefinition (), "bookservice")); kembali nol; }}Kemudian daftarkan parser yang baru saja Anda tetapkan di namespace:
Public Class BookserViceNeSpaceHandler memperluas namespaceHandlersupport {public void init () {registerbeandefinitionParser ("layanan buku", bookservicedEfinitionParser ()); }}Kemudian buat folder meta-INF di sumber daya dan buat spring.schemas dan spring.handlers, yang digunakan untuk mengonfigurasi jalur file struktur dokumen dari tag khusus dan parser yang mem-parsing namespace khusus.
Jalur file
Spring.Handlers:
http/: //www.deniro.net/schema/service=net.deniro.spring4.dynamic.bookservicenamespaceAndler
Spring.schemas:
http/: //www.deniro.net/schema/service.xsd=schema/bookservice.xsd
CATATAN: File XSD harus ditempatkan di Direktori Sumber Daya Keturunan.
Mengutip Tag Kustom:
<? XML Versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmls xmlns: me = "http://www.deniro.net/schema/service" xsi: schemalocation = "http://www.springframework.org http://www.deniro.net/schema/service http://www.deniro.net/schema/service.xsd "> <bean id =" bookdao "/> <Me: Book-Service Dao =" bookdao "/</beans>
Di sini, kami merujuk tag khusus di kepala dan menamainya "saya", dan kemudian kami dapat menggunakannya o (∩_∩) o ~
Meringkaskan
Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini memiliki nilai referensi tertentu untuk studi atau pekerjaan semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.