Suntikan Berasaskan XML pada Musim Bunga

1. Pengenalan

Dalam tutorial asas ini, kita akan belajar bagaimana membuat konfigurasi kacang berasaskan XML sederhana dengan Spring Framework.

2. Gambaran keseluruhan

Mari mulakan dengan menambahkan kebergantungan perpustakaan Spring di pom.xml :

 org.springframework spring-context 5.1.4.RELEASE  

Versi terbaru dari pergantungan Spring boleh didapati di sini.

3. Suntikan Ketergantungan - gambaran keseluruhan

Suntikan ketergantungan adalah teknik di mana kebergantungan objek dibekalkan oleh bekas luaran.

Katakan kita mempunyai kelas aplikasi yang bergantung pada perkhidmatan yang benar-benar mengendalikan logik perniagaan:

public class IndexApp { private IService service; // standard constructors/getters/setters } 

Sekarang katakan IService adalah antara muka:

public interface IService { public String serve(); } 

Antara muka ini boleh mempunyai pelbagai pelaksanaan.

Mari kita lihat satu kemungkinan pelaksanaan:

public class IndexService implements IService { @Override public String serve() { return "Hello World"; } } 

Di sini, IndexApp adalah komponen peringkat tinggi yang bergantung pada komponen tahap rendah yang disebut IService .

Pada hakikatnya, kami melepaskan IndexApp dari pelaksanaan tertentu dari IService yang dapat berubah berdasarkan berbagai faktor.

4. Suntikan Ketergantungan - dalam Tindakan

Mari lihat bagaimana kita dapat menyuntik kebergantungan.

4.1. Menggunakan Properties

Mari lihat bagaimana kita dapat menghubungkan kebergantungan bersama menggunakan konfigurasi berasaskan XML:

Seperti yang dapat dilihat, kami membuat contoh IndexService dan memberikannya id. Secara lalai, kacang adalah singleton. Juga, kami membuat contoh IndexApp .

Dalam kacang ini, kami menyuntik kacang yang lain menggunakan kaedah setter.

4.2. Menggunakan Pembina

Daripada menyuntik kacang melalui kaedah setter, kita dapat menyuntik kebergantungan menggunakan konstruktor:

4.3. Menggunakan Kilang Statik

Kita juga boleh menyuntik kacang yang dikembalikan oleh kilang. Mari kita mencipta sebuah kilang mudah yang pulangan satu contoh iPeraturan berdasarkan bilangan yang dibekalkan:

public class StaticServiceFactory { public static IService getNumber(int number) { // ... } } 

Sekarang mari kita lihat bagaimana kita dapat menggunakan implementasi di atas untuk memasukkan kacang ke dalam IndexApp menggunakan konfigurasi berdasarkan XML:

Dalam contoh di atas, kami memanggil kaedah getService statik menggunakan kaedah kilang untuk membuat kacang dengan id messageService yang kami suntik ke dalam IndexApp.

4.4. Menggunakan Kaedah Kilang

Mari pertimbangkan kilang contoh yang mengembalikan instance IService berdasarkan nombor yang dibekalkan. Kali ini, kaedahnya tidak statik:

public class InstanceServiceFactory { public IService getNumber(int number) { // ... } } 

Sekarang mari kita lihat bagaimana kita dapat menggunakan implementasi di atas untuk memasukkan kacang ke dalam IndexApp menggunakan konfigurasi XML:

Dalam contoh di atas, kami memanggil kaedah getService pada contoh InstanceServiceFactory menggunakan kaedah kilang untuk membuat kacang dengan id messageService yang kami suntikkan di IndexApp .

5. Menguji

Ini adalah bagaimana kita dapat mengakses kacang yang dikonfigurasi:

@Test public void whenGetBeans_returnsBean() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("..."); IndexApp indexApp = applicationContext.getBean("indexApp", IndexApp.class); assertNotNull(indexApp); } 

6. Kesimpulannya

Dalam tutorial ringkas ini, kami menggambarkan contoh bagaimana kami dapat menyuntik kebergantungan menggunakan konfigurasi berasaskan XML menggunakan Spring Framework.

Pelaksanaan contoh-contoh ini dapat dijumpai dalam projek GitHub - ini adalah projek berasaskan Maven, jadi mudah untuk diimport dan dijalankan sebagaimana adanya.