Rumah > Java > javaTutorial > Mengapa Suntikan Pembina atau Setter Diutamakan Daripada Suntikan Medan pada Musim Bunga?

Mengapa Suntikan Pembina atau Setter Diutamakan Daripada Suntikan Medan pada Musim Bunga?

DDD
Lepaskan: 2024-12-08 01:54:12
asal
292 orang telah melayarinya

Why Is Constructor or Setter Injection Preferred Over Field Injection in Spring?

Apakah Suntikan Medan dan Mengapa Ia Umumnya Tidak Diutamakan

Dalam aplikasi Spring MVC dan Portlet, suntikan medan merujuk kepada amalan menyuntik terus kebergantungan ke dalam medan beranotasi dengan @Autowired, seperti yang ditunjukkan dalam contoh berikut:

@Component
public class MyComponent {
    @Autowired
    private Cart cart;
}
Salin selepas log masuk

Sebagai alternatif, suntikan pembina melibatkan pelepasan kebergantungan sebagai parameter dalam pembina:

@Component
public class MyComponent {
    private final Cart cart;

    @Autowired
    public MyComponent(Cart cart) {
        this.cart = cart;
    }
}
Salin selepas log masuk

Kebaikan dan Kelemahan:

Suntikan pembina menawarkan beberapa kelebihan:

  • Ketidakbolehubah: Ia membenarkan untuk mencipta tidak berubah objek, kerana kebergantungan ditetapkan semasa instantiasi.
  • Gandingan longgar: Kelas mempunyai kebergantungan yang lebih longgar pada bekas DI dan boleh digunakan di luarnya.
  • Kebolehujian: Objek boleh dijadikan instantiated untuk ujian unit tanpa perlu refleksi.

Suntikan penetap juga merupakan pilihan, menyediakan mekanisme untuk menyuntik kebergantungan yang mungkin menjadi pilihan atau boleh diubah dari semasa ke semasa.

Sebaliknya, suntikan medan mengalami beberapa kelemahan:

  • Gandingan ketat: Ia menghasilkan gandingan ketat dengan DI bekas.
  • Ketidakbolehubah: Ia menghalang penciptaan objek tidak berubah.
  • Keperluan pantulan: Ia memerlukan refleksi untuk instantiasi di luar bekas DI.
  • Kebergantungan tersembunyi: Kebergantungan sebenar ialah dikaburkan daripada antara muka.
  • Terlalu banyak tanggungan: Ia menggalakkan penambahan tanggungan yang berlebihan, melanggar Prinsip Tanggungjawab Tunggal.

Garis Panduan Suntikan:

Spring mengesyorkan yang berikut garis panduan:

  • Gunakan suntikan pembina untuk kebergantungan mandatori atau untuk mencapai kebolehubahan.
  • Gunakan suntikan penetap untuk kebergantungan pilihan atau boleh ubah.
  • Elakkan suntikan medan dalam kebanyakan kes.

Kesimpulan:

Memandangkan keburukan suntikan medan, secara amnya adalah dinasihatkan untuk memilih suntikan pembina atau penetap. Kemudahan suntikan medan ditimbang oleh potensi kelemahan dan batasannya.

Atas ialah kandungan terperinci Mengapa Suntikan Pembina atau Setter Diutamakan Daripada Suntikan Medan pada Musim Bunga?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan