Musim semi menyediakan banyak postprosesor untuk diperluas pengembang, seperti beanpostprocessor, beanfactoryprocessor, beanvalidationPostProcessor dan postprosesor lainnya. Sebagian besar metode penggunaannya serupa. Memahami salah satu dari mereka dan menguasai metode penggunaan mereka, dan yang lainnya dapat dipahami dengan analogi.
Di sini kami menggunakan beanpostprocessor sebagai contoh untuk menunjukkan bagaimana itu digunakan.
Antarmuka BeanPostProcessor menyediakan dua metode bagi pengembang untuk menyesuaikan: postprocessBeforeInitialization dan postprocessafterInitialisasi.
PostprocessBeforeInitialization: Metode ini terutama untuk musim semi untuk menyesuaikan proses sebelum memanggil metode inisialisasi ketika kacang diinisialisasi.
PostprocessAfterInitialization: Metode ini terutama untuk Spring untuk menyesuaikan proses setelah memanggil metode inisialisasi saat inisialisasi kacang.
Kode contoh:
/** * uji kacang */kelas publik kucing {name string privat; usia int pribadi; public void say () {System.out.println ("Name:" + Name); System.out.println ("Umur:" + usia); } public string getName () {return name; } public void setName (name string) {this.name = name; } public int getage () {usia kembali; } public void setage (int usia) {this.age = usia; }} /** * Custom postprocessor*/public class CatBeanPostProcessor implements BeanPostProcessor { @Nullable @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof Cat) { //Output original attribute Cat cat = (Cat) bean; cat.say (); Kembalikan kacang; } return bean; } @Nullable @Override Objek publik PostProcessAntInitialization (Object Bean, String Beanname) melempar BeansException {if (bean instance dari Cat) {// Ubah nilai atribut dan kembalikan cat cat = (cat) bean; cat.setname ("Hello Maomi"); cat.setage (3); kembalikan kucing; } return bean; }} /** * run */kelas publik run {public static void main (string [] args) {applicationContext applicationContext = new classpathxmlapplicationContext ("spring-bean.xml"); Cat cat = (cat) applicationContext.getBean ("cat"); cat.say (); }}Informasi Konfigurasi XML
<!-Mengkonfigurasi kacang dan inisialisasi-> <bean id = "cat"> <name properti = "name" value = "hellokitty" /> <name properti = "usia" value = "1" /> </t bean> <bean id = "catbeanpostprocessor" />
Hasil output:
Nama: Hellokitty
Usia: 1
Nama: Halo Maomi
Usia: 3
Anda dapat melihat bahwa informasi kacang yang diproses melalui postprocessor telah berubah. Akhirnya, mari kita lihat cara memanggil implementasi khusus dalam kode sumber.
Dalam metode inisialisasi kacang: abstractAutowirecapableBeanFactory.java
/** * Inisialisasi kacang */objek terlindungi initializeBean (string final beanname, final objek bean, @nullable rootbeandefinition mbd) {// hilangkan bagian dari objek kode yang tidak relevan WrappedBean = bean; // sebelum inisialisasi if (mbd == null ||! Mbd.issynthetic ()) {wrappedBean = applyBeanPostProcessorSBeforeInitialization (WrappedBean, beanname); } coba {// Memanggil metode inisialisasi untuk menginisialisasi bean invokeInitmethods (beanname, wrappedbean, mbd); } Catch (Throwable Ex) {Throw New BeancreationException ((MBD! = NULL? MBD.GetResourCedescription (): null), Beanname, "Doa Metode Init gagal", ex); } // if (mbd == null ||! Mbd.issynthetic ()) {wrappedBean = applyBeanPostProcessorSaFterInitialization (WrappedBean, beanname); } return WrappedBean; } // Metode PostProcessBeforeInitialization memanggil @Override Public Object ApplyBeanPostProcessorSBeforeInitialization (objek yang ada, string beanname) melempar BeansException {Object hasil = yang ada; untuk (beanpostprocessor beanprocessor: getBeanPostProcessors ()) {// memanggil postprocessBeforeInitialization Metode objek saat ini = beanprocessor.postprocessBeforeInisialisasi (hasil, beanname); if (current == null) {hasil pengembalian; } hasil = saat ini; } hasil pengembalian; } // Metode PostProcessAfterInitialization Call @Override Public Object ApplyBeanPostProcessorSaFterInitialization (objek yang ada, string beanname) melempar beansException {objek hasil = yang ada; untuk (beanpostprocessor beanprocessor: getBeanPostProcessors ()) {// PostprocessafterInitialization Metode Custom Call Current Object = BeanProcessor.PostProcessAfterInitialization (Hasil, BeanName); if (current == null) {hasil pengembalian; } hasil = saat ini; } hasil pengembalian; }Di atas adalah proses panggilan musim semi untuk mengimplementasikan metode khusus. Saya berharap ini akan membantu untuk pembelajaran semua orang, dan saya harap semua orang akan lebih mendukung wulin.com.