Artikel ini terutama mempelajari konten yang relevan dari urutan eksekusi pemuatan kacang pegas, sebagai berikut.
Sumber masalahnya:
Ada kacang yang merupakan a dan kacang yang adalah B. Ketika a dipakai, Anda ingin menetapkan nama properti ke metode funb dengan nilai pengembalian B.
Jika hanya ditulis dalam:
private B b;
private String name = b.funb();
Kesalahan akan dilaporkan dan NullpointException adalah karena B belum diatur saat ini, jadi itu nol.
Solusinya adalah sebagai berikut kode, dan pada saat yang sama, pelajari urutan eksekusi inisialisasi, metode konstruksi objek, dan metode init di musim semi.
Public Class A mengimplementasikan inisialisasi {private b b; name string pribadi; // = b.funb (); public void setB (b b) {System.out.println ("a.setb diinisialisasi"); this.b = b;} public a () {System.out.println ("A inisial");} public void init () {System.out.println ("init"); this.name = b.funb ();}@override public string toString () {return super.toString () + this.name;} public void afterpropertiesset () melempar pengecualian {// sebenarnya, dimungkinkan untuk meletakkannya di sini // this.name = b.funb (); System.out.println ("AfterProPertiesset");}} Public Class B {public String funb () {System.out.println ("funb"); return "b.funb";} public b () {System.out.println ("b informed");}}File Konfigurasi Musim Semi
<beans default-autowire = "byname"> <bean id = "a" init-method = "init"> </bean> <bean id = "b"> </ bean> </bean>
Kode Uji:
public static void main (string [] args) {applicationContext context = new FilesystemxMlappleCicationContext ("src/testspring/bean.xml"); a a = (a) context.getbean ("a"); System.out.println (a);}Output program adalah:
A yang diinisialisasi
B diinisialisasi
A.setb diinisialisasi
Afterpropertiesset
init
Funb
[email protected]
Dari sini, kita dapat melihat bahwa atribut nama A berhasil diatur ke nilai pengembalian metode f funb b saat kacang dimuat. Poin kuncinya adalah menggunakan init-Method untuk mengimplementasikannya.
Urutan pemuatan juga dapat dilihat sebagai:
Konstruktor Pertama -> Kemudian B Set Metode Injeksi -> InitializingBean AfterProPertiesset Metode -> Metode Init -Method
Konten berikut dikutip dari buku ini, tetapi saya menemukan bahwa bahkan jika saya mengutipnya sekali, pemahaman saya tentang isinya akan lebih mendalam!
1. Proses kacang perakitan pegas
1. Instantiasi;
2. Atur nilai atribut;
3. Jika antarmuka BeanNeMeaware diimplementasikan, hubungi setBeanName untuk mengatur ID atau nama kacang;
4. Jika Anda mengimplementasikan antarmuka BeanFactoryAware, hubungi SetBeanFactory untuk mengatur BeanFactory;
5. Jika ApplicationContextAware diimplementasikan, hubungi SetApplicationContext untuk mengatur ApplicationContext
6. Panggil metode pra-inisialisasi beanpostprocessor;
7. Hubungi metode afterpropertiesset () dari inisialisasi;
8. Panggil metode init-metode yang disesuaikan;
9. Hubungi metode pasca-inisialisasi beanpostprocessor;
Proses Shutdown Container Musim Semi
1. Panggil DisposableBean Destroy ();
2. Panggil metode Metode Hancurkan yang disesuaikan;
1. Kacang tunggal
memuat
1. Instantiasi;
2. Atur nilai atribut;
3. Jika antarmuka BeanNeMeaware diimplementasikan, hubungi setBeanName untuk mengatur ID atau nama kacang;
4. Jika Anda mengimplementasikan antarmuka BeanFactoryAware, hubungi SetBeanFactory untuk mengatur BeanFactory;
5. Jika ApplicationContextAware diimplementasikan, hubungi SetApplicationContext untuk mengatur ApplicationContext
6. Panggil metode pra-inisialisasi beanpostprocessor;
7. Hubungi metode afterpropertiesset () dari inisialisasi;
8. Panggil metode init-metode yang disesuaikan;
9. Hubungi metode pasca-inisialisasi beanpostprocessor;
Container musim semi tutup
1. Panggil DisposableBean Destroy ();
2. Panggil metode Metode Hancurkan yang disesuaikan;
2. Urutan beberapa kacang
Memprioritaskan pemuatan kacang implementasi beanpostprocessor
Dalam urutan definisi kacang, urutan pemuatan kacang (bahkan jika ada ID ditimpa saat memuat beberapa file pegas)
Ketika "Setel nilai atribut" (Langkah 2), ketika bertemu Ref, kacang yang sesuai dengan ID ref dimuat terlebih dahulu setelah "Instantiation" (Langkah 1).
Subclass dari AbstractFactoryBean akan memanggil metode CreateInstance setelah Langkah 6, dan kemudian metode GETObjectType akan dipanggil.
Kelas Beanfactoryutils juga akan mengubah urutan pemuatan kacang.
Di atas adalah semua konten dari artikel ini tentang urutan implementasi pemuatan kacang pegas, dan saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!