Ketergantungan melingkar
Definisi: Ketergantungan melingkar adalah referensi melingkar, yang berarti dua atau lebih kacang saling berpegang satu sama lain, misalnya, sirkularitas mengacu pada sirkularitasb, sirkularitas R mengacu pada sirkularitasc, dan sirkularitasc mengacu pada sirkularitas. Membentuk hubungan referensi melingkar.
Saat menggunakan Spring, jika Anda terutama menggunakan metode injeksi ketergantungan berbasis konstruktor, Anda dapat menghadapi ketergantungan melingkar. Singkatnya, konstruktor Bean A tergantung pada Bean B, dan konstruktor Bean B tergantung pada Bean A. dalam hal ini musim semi akan melempar beanCurrently increation exception pada waktu kompilasi.
Kelas a
@ComponentPublic Class classA {private classb classb; @Autowired public classA (classb classb) {this.classb = classb; } public void printClass () {System.out.println ("class a =" + this); System.out.println ("class b =" + classb); }}Kelas B.
@ComponentPublic Class ClassB {private classA classA; @Autowired public classB (classa classa) {this.classa = classa; } public void printClass () {System.out.println ("class a =" + classa); System.out.println ("Kelas B =" + ini); }}tes
@ContextConfiguration (class = {classa.class, classb.class}) @runwith (springrunner.class) kelas publik mytest {@autowired private classa classa; @Autowired private classb classb; @Test name public void () {classa.printclass (); classb.printclass (); }}alasan
Pada saat ini, Anda akan menemukan bahwa pengecualian yang dikelilingi oleh orang -orang. Alasan untuk ini adalah bahwa ketika Spring membuat kacang, itu akan membuat instansi objek terlebih dahulu dan kemudian menyuntikkan ketergantungan. Misalkan Spring membuat Kelas A yang pertama, maka akan menemukan bahwa ada ketergantungan Kelas B dalam konstruktor, sehingga akan berubah untuk membuat Kelas B, dan kemudian menemukan ketergantungan pada Kelas A di Konstruktor Kelas B. Pada saat ini, Kelas A belum diinisialisasi, sehingga akan berubah untuk membuat Kelas A, yang akan jatuh ke loop datar.
Larutan
Beralih ke injeksi ketergantungan berbasis setter dapat menyelesaikan masalah ini. Karena injeksi ketergantungan berbasis setter pertama-tama akan memanggil konstruktor default untuk instantiate objek, dan kemudian memanggil setter untuk mengimplementasikan injeksi ketergantungan. Dengan cara ini, tidak ada ketergantungan dalam tahap instantiasi objek. Oleh karena itu, setelah Kelas A dipakai, Kelas B dipanggil, dan setelah Kelas B dipakai, ia mulai menetapkan nilai. Pada saat ini, Kelas A sudah dipakai, sehingga dapat berhasil merujuk ke Kelas A.
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.