Antarmuka InitializingBean menyediakan cara untuk menginisialisasi metode untuk kacang. Ini hanya termasuk metode afterpropertiesset. Kelas apa pun yang mewarisi antarmuka akan menjalankan metode saat menginisialisasi kacang.
Diuji sebagai berikut:
Impor org.springframework.beans.factory.initializeBean; testinitializingBean kelas publik mengimplementasikan inisialisasi {@override public void afterpropertiesset () melempar pengecualian {System.out.println ("ceshi initializingbean"); } public void testInit () {System.out.println ("Ceshi init-Method"); }}File konfigurasi
<bean id = "testinitializingBean"> </tac>
Fungsi utamanya adalah sebagai berikut
kelas publik {public static void main (string [] args) {applicationContext context = new FileSyStemXMLapPlicationContext ("/src/main/java/com/beans.xml"); }}Hasil tesnya adalah:
Ceshi InitializeBean
Ini berarti bahwa ketika musim semi menginisialisasi kacang, jika kacang mengimplementasikan antarmuka inisialisasi, metode afterpropertiesset akan dipanggil secara otomatis.
Jadi masalahnya adalah ketika mengkonfigurasi kacang, Anda juga dapat mengonfigurasi metode inisialisasi untuk kacang menggunakan konfigurasi init-metode. Manakah dari keduanya yang akan dieksekusi terlebih dahulu? Selanjutnya, uji, ubah file konfigurasi, dan tambahkan metode init:
<bean id = "testinitializationBean" init-method = "testinit"> </tacer>
Jalankan program dan dapatkan hasilnya:
Ceshi InitializeBean
Ceshi Init-Method
Dari hasilnya, kita dapat melihat bahwa ketika pegas menginisialisasi kacang, jika kacang mengimplementasikan antarmuka inisialisasi dan menentukan metode init dalam file konfigurasi, sistem pertama-tama memanggil metode afterpropertieset (), dan kemudian memanggil metode yang ditentukan dalam metode init.
Jadi bagaimana metode ini diimplementasikan di musim semi? Dengan melihat kelas kode sumber kacang pemuatan pegas, Anda dapat melihat misteri. Metode InvokeInitM di AbstractAutowiredCapableBeanFactory Class sangat jelas, sebagai berikut:
void yang dilindungi InvokeInitMethods (string beanname, bean objek akhir, rootbeandefinition mbd) melempar lempar {// menilai apakah kacang telah menerapkan antarmuka inisialisasi. Jika InitializingBean Interface diimplementasikan, hanya metode afterpropertiesset dari kacang yang disebut boolean isiniitializingBean = (instance dari inisialisasi); if (isInitializeBean && (mbd == null ||! mbd.isexternallyManMageTinItMethod ("AfterPropertiesset"))) {if (Logger.isdebugeNabled ()) {Logger.debug ("Invoking afterpropertiess () dengan bean with bean dengan beane (" + "" "" "" "") {LOGGER.DEBUG ("BEANNINE (" BEANKING ("BEANNINE (" BEANNINE "" " } if (system.getSecurityManager ()! = null) {coba {accessController.doprivileged (new PrivilegedExceptionAction <POMPENT> () {public Object run () lemparan Exception {// Call afterpropertiesset ((inisialisasi nol (inisialisasi). Afterproperix (). } Catch (PrivilEgeGactionException PAE) {throw pae.getException (); }} else {// Langsung hubungi afterpropertiesset ((initializeBean) bean) .AfterPropertiesset (); }}} if (mbd! = null) {string initmethodname = mbd.getInitMethodname (); // Bedakan apakah metode init-metode ditentukan. Jika metode init-metode ditentukan, maka init-metode if (initmethodname! = Null &&! (IsInitializingBean && "afterpropertiesset". Metode init-Method adalah mengimplementasikan InvokeCustominItMethod (Beanname, Bean, MBD); }}}Meringkaskan:
1. Spring menyediakan kacang dengan dua cara untuk menginisialisasi kacang, mengimplementasikan antarmuka inisialisasi, mengimplementasikan metode afterpropertiesset, atau menentukannya melalui metode init dalam file konfigurasi. Kedua metode dapat digunakan secara bersamaan.
2. Menerapkan antarmuka InitializeBean secara langsung memanggil metode AfterProPertiesset, yang sedikit lebih efisien daripada menyebut metode yang ditentukan oleh Metode init melalui refleksi, tetapi metode init-metode menghilangkan ketergantungan pada pegas.
3. Jika terjadi kesalahan saat memanggil metode AfterPropertiesset, metode yang ditentukan oleh Metode init tidak dipanggil.
Peran inisialisasi musim semi
Antarmuka inisialisasi Spring sangat berguna. Terletak di musim semi. Ini hanya menyediakan satu metode afterpropertiesset (). Saat Anda mengimplementasikan metode ini, Spring akan memberi Anda dukungan tingkat kerangka kerja: Ketika Anda menghasilkan instance kelas yang mengimplementasikan antarmuka melalui wadah Sring, itu akan memanggil metode AfterPropertiesset. Melalui metode ini, Anda dapat memeriksa apakah kacang Anda diinisialisasi dengan benar. Tentu saja, Anda juga dapat menggunakan metode init-Method. Kedua metode ini dapat digunakan secara bersamaan, dan urutan panggilan adalah metode init.
Meringkaskan
Di atas adalah penggunaan antarmuka inisialisasi di musim semi yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!