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

Kebergantungan kitaran dalam but musim bunga

Barbara Streisand
Lepaskan: 2024-10-22 20:26:03
asal
751 orang telah melayarinya

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;
    }
}
Salin selepas log masuk
@Component
public class B{
    private final A a;
    public B(A a){
        this.a = a;
    }
}
Salin selepas log masuk
Salin selepas log masuk

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.
Salin selepas log masuk

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;
    }
}
Salin selepas log masuk
@Component
public class B{
    private final A a;
    public B(A a){
        this.a = a;
    }
}
Salin selepas log masuk
Salin selepas log masuk

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!

sumber:dev.to
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan