Mengapa ApplicationContext.getBean() dalam Spring Tidak Digalakkan
Memanggil ApplicationContext.getBean() dalam Spring dianggap sebagai amalan yang tidak baik kerana ia melanggar prinsip Inversi Kawalan ( IoC).
Penyongsangan Kawalan dan Kebergantungan Suntikan
IoC dan suntikan kebergantungan adalah asas kepada reka bentuk Spring. IoC merangkum konsep bahawa objek tidak seharusnya bertanggungjawab untuk mencipta atau mencari kebergantungan mereka. Sebaliknya, kebergantungan ini harus disediakan oleh sumber luaran.
Suntikan Ketergantungan (DI) ialah mekanisme yang Spring menyuntik kebergantungan ini secara automatik ke dalam objek yang bekerjasama. Ini membenarkan gandingan longgar, apabila objek tidak bergantung pada pelaksanaan khusus kebergantungannya.
Masalah dengan getBean()
Memanggil getBean() secara langsung bercanggah dengan prinsip ini:
-
Gandingan Ketat: Objek yang memanggil getBean() adalah ketat digandingkan dengan bekas Spring. Mereka tahu dan mengambil berat tentang cara kebergantungan disediakan, yang menjadikan mereka sukar untuk menguji dan memfaktorkan semula.
-
Pintas Pengurusan Ketergantungan: Dengan menggunakan getBean(), objek memintas mekanisme DI dan terus akses bekas Spring. Ini boleh menyebabkan kebergantungan yang salah disuntik atau kemungkinan ralat masa jalan.
-
Kebolehujian Dikurangkan: Objek yang bergantung pada getBean() tidak boleh diuji dengan mudah secara berasingan. Pelaksanaan olok-olok atau stub tidak boleh disuntik, menjadikan ujian kelakuan objek ini sukar.
Alternatif untuk getBean()
Daripada memanggil getBean() secara langsung, pembangun harus menggunakan yang berikut pendekatan:
-
Suntikan Pembina: Lulus kebergantungan sebagai hujah kepada pembina. Spring akan menyuntik kacang yang sepadan secara automatik.
-
Suntikan Penetap: Tentukan kaedah penetap dalam objek yang bekerjasama dan gunakan teg dalam konfigurasi XML atau anotasi @Autowired dalam Java untuk menentukan kebergantungan.
-
Suntikan Medan: Anotasi ahli medan dengan @Autowired, tetapi ini harus digunakan dengan berhati-hati kerana ia boleh menyebabkan isu keterlihatan.
Dengan mematuhi amalan ini, pembangun boleh mencapai longgar menggandingkan, memudahkan ujian dan memastikan keteguhan aplikasi Spring mereka.
Atas ialah kandungan terperinci Mengapakah Memanggil `ApplicationContext.getBean()` dalam Spring Dianggap Amalan Buruk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!