Rumah  >  Artikel  >  Java  >  Kebergantungan kitaran dalam but musim bunga

Kebergantungan kitaran dalam but musim bunga

Barbara Streisand
Barbara Streisandasal
2024-10-22 20:26:03642semak imbas

Dépendances cycliques en spring boot

Pergantungan kitaran berlaku di Java apabila dua kelas atau dua modul bergantung antara satu sama lain, sekali gus membentuk kitaran.

Andaikan kita mempunyai dua biji A dan B yang bergantung antara satu sama lain seperti yang ditunjukkan dalam contoh di bawah:

@Component
public class A{
    private final B b;
    public A(B b){
        this.b = b;
    }
}
@Component
public class B{
    private final A a;
    public B(A a){
        this.a = a;
    }
}

Apabila menjalankan projek anda, anda akan mendapat ralat berikut:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

Jadi, untuk menyelesaikan pergantungan kitaran ini, kami mempunyai empat penyelesaian:

  • Kod refactor untuk memisahkan tanggungjawab.
  • Gunakan kelas atau antara muka perantaraan.
  • Gunakan suntikan pergantungan melalui kaedah (setter).
  • Gunakan anotasi seperti @lazy untuk menangguhkan pemulaan.

Dalam kes kami, kami akan menggunakan penyelesaian keempat iaitu hanya menggunakan anotasi @lazy seperti yang ditunjukkan dalam contoh di bawah:

@Component
public class A{
    private final B b;
    public A(@Lazy B b){
        this.b = b;
    }
}
@Component
public class B{
    private final A a;
    public B(A a){
        this.a = a;
    }
}

Dan di sana kita berada, kita kini keluar dari kitaran ini :)

Atas ialah kandungan terperinci Kebergantungan kitaran dalam but musim bunga. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn