Di Spring Container, selain membangun dependensi melalui <ref>, ada beberapa hubungan khusus antara kedua kacang.
1 warisan
Dalam prinsip pemrograman yang berorientasi objek, ketika beberapa kelas memiliki metode dan properti yang sama, kelas induk dapat diperkenalkan untuk menghilangkan kode duplikat. Di Spring Container, jika beberapa kacang memiliki informasi konfigurasi yang sama, kita dapat menentukan kacang induk, sehingga kacang anak akan secara otomatis mewarisi informasi konfigurasi kacang induk.
<!-- Parent Bean--><bean id="abstractBook" p:name="veil" abstract="true"></bean><!-- Child Bean--><bean id="book1" p:press="Chongqing Publishing House" parent="abstractBook"/><bean id="book2" p:press="Shanghai Translation Publishing House" parent="abstractBook"/>
Secara umum, fungsi kacang induk adalah untuk menyederhanakan konfigurasi kacang anak, sehingga diatur ke kelas abstrak (Abstract = "true"); Jika kacang induk tidak diatur ke kelas abstrak di sini, wadah musim semi akan membuat instantiasi kacang induk.
2 pra-ketergantungan
Secara umum, <ref> digunakan untuk membangun dependensi antara kacang. Wadah musim semi bertanggung jawab untuk mengelola hubungan ini. Saat instantiasi kacang, wadah memastikan bahwa semua kacang bergantung pada kacang telah menyelesaikan pekerjaan inisialisasi.
Tetapi dalam beberapa kasus, ketergantungan antara kacang tidak begitu jelas.
Misalkan dalam skenario ini, suatu sistem menetapkan beberapa parameter sistem (seperti periode validitas kata sandi, apakah akan mengaktifkan pemantauan, dll.), Dan parameter startup ini digunakan untuk mengontrol logika operasi sistem. Kami menggunakan kelas pengaturan untuk mewakili parameter ini:
Pengaturan kelas publik { / ** * Waktu kedaluwarsa kata sandi (unit: hari) * / public static int pass_timeout = 30; / *** apakah akan mengaktifkan pemantauan*/ public static boolean is_monitor = false;}Di sini kami menetapkan nilai default untuk parameter ini. Sistem ini juga memiliki backend administratif, melalui mana administrator dapat menyesuaikan parameter sistem ini dan menyimpannya ke database. Oleh karena itu, ketika aplikasi dimulai, parameter sistem ini perlu dimuat dari database:
sistem kelas publik {public system () {init (); } /*** Inisialisasi* /private void init () {// Misalkan nilai -nilai ini berasal dari pengaturan database.pass_timeout = 20; Settings.is_monitor = true; }}Sistem memiliki manajer kedaluwarsa kata sandi, yang akan membuat tugas waktunya untuk mendeteksi apakah kata sandi kedaluwarsa berdasarkan [jumlah hari ketika kata sandi berakhir] dalam parameter sistem:
PUSTAKA PUBLIK PASSMANGER {int timeout; Public PassManager () {timeout = settings.pass_timeout; timertask (); } / *** Tugas waktunya untuk mendeteksi apakah kata sandi kedaluwarsa* / private void timertask () {} public int getTimeout () {return timeout; }}Meskipun PASSManager tidak bergantung langsung pada pengaturan, secara logis, PASSManager mengharapkan sistem untuk memuat parameter sistem yang diinisialisasi sebelum memulai.
Di musim semi, Anda dapat secara eksplisit menentukan kacang pra-ketergantungan dari kacang melalui properti yang bergantung pada untuk memastikan bahwa kacang pra-ketergantungan dari kacang ini telah dimuat sebelum instantiasi.
<bean id = "System"/> <bean id = "manager" tergantung-on = "sistem"/>
Jika awalan tergantung pada beberapa kacang, nama kacang dapat dikonfigurasi dengan koma, spasi, atau titik koma.
3 ID kutipan
Misalkan seekor kacang perlu merujuk pada nilai ID (Beanname) dari kacang lain. Ini umumnya digunakan untuk mendapatkan kacang lain melalui metode Getbean (Beanname) dalam kacang selama runtime.
Ini dapat dikonfigurasi seperti ini:
<bean id = "penulis"/> <bean id = "book" p: authorid = "penulis"/>
Atribut AuthorID yang ditambahkan dalam buku:
/** * ID Author Bean */Private String AuthorID;
Meskipun dapat diatur dalam bentuk literal ini, tidak ada hubungan referensi nyata antara keduanya. Oleh karena itu, kesalahan konfigurasi hanya akan ditemukan ketika panggilan spesifik dipanggil.
Spring menyediakan tag elemen <dref>, yang merujuk nama kacang lain melalui <dref>. Dengan cara ini, ketika wadah dimulai, kebenaran hubungan referensi akan diperiksa, dan informasi konfigurasi yang salah dapat ditemukan terlebih dahulu.
<bean id = "author10"/> <bean id = "book10"> <name properti = "authorid"> <idref bean = "author10"/> </propert> </tact>
Jika kesalahan konfigurasi terjadi, BeandefinitionStoreException akan dilemparkan ketika wadah musim semi dimulai, dan parser XML IDE juga akan menemukan kesalahan referensi terlebih dahulu, sehingga disarankan untuk menggunakan tag elemen <dref> untuk merujuk ID.
Meringkaskan
Di atas adalah hubungan khusus antara biji musim semi yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan. Editor akan membalas Anda tepat waktu!