Injeksi Berbasis XML di Musim Semi

1. Perkenalan

Dalam tutorial dasar ini, kita akan belajar bagaimana melakukan konfigurasi bean berbasis XML sederhana dengan Spring Framework.

2. Ikhtisar

Mari kita mulai dengan menambahkan ketergantungan pustaka Spring di pom.xml :

 org.springframework spring-context 5.1.4.RELEASE  

Versi terbaru dari ketergantungan Spring dapat ditemukan di sini.

3. Injeksi Ketergantungan - Gambaran Umum

Injeksi ketergantungan adalah teknik dimana ketergantungan suatu objek dipasok oleh wadah eksternal.

Katakanlah kita memiliki kelas aplikasi yang bergantung pada layanan yang benar-benar menangani logika bisnis:

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

Sekarang katakanlah IService adalah Interface:

public interface IService { public String serve(); } 

Antarmuka ini dapat memiliki banyak implementasi.

Mari kita lihat sekilas satu potensi penerapan:

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

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

Intinya, kami memisahkan IndexApp dari implementasi IService tertentu yang dapat bervariasi berdasarkan berbagai faktor.

4. Injeksi Ketergantungan - dalam Tindakan

Mari kita lihat bagaimana kita bisa menyuntikkan ketergantungan.

4.1. Menggunakan Properties

Mari kita lihat bagaimana kita bisa menyatukan dependensi menggunakan konfigurasi berbasis XML:

Seperti yang dapat dilihat, kami membuat instance IndexService dan menugaskannya sebagai id. Secara default, kacang adalah singleton. Juga, kami membuat instance IndexApp .

Di dalam kacang ini, kami menyuntikkan kacang lainnya menggunakan metode penyetel.

4.2. Menggunakan Konstruktor

Alih-alih menyuntikkan kacang melalui metode penyetel, kita dapat menyuntikkan ketergantungan menggunakan konstruktor:

4.3. Menggunakan Pabrik Statis

Kami juga bisa menyuntikkan kacang yang dikembalikan oleh pabrik. Mari buat pabrik sederhana yang mengembalikan instance IService berdasarkan nomor yang diberikan:

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

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

Dalam contoh di atas, kami memanggil metode getService statis menggunakan metode pabrik untuk membuat kacang dengan id messageService yang kami masukkan ke IndexApp.

4.4. Menggunakan Metode Pabrik

Mari pertimbangkan pabrik instans yang mengembalikan instans IService berdasarkan nomor yang diberikan. Kali ini, metodenya tidak statis:

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

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

Dalam contoh di atas, kami memanggil metode getService pada instance InstanceServiceFactory menggunakan metode pabrik untuk membuat kacang dengan id messageService yang kami masukkan di IndexApp .

5. Pengujian

Beginilah cara kami mengakses kacang yang dikonfigurasi:

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

6. Kesimpulan

Dalam tutorial singkat ini, kami mengilustrasikan contoh bagaimana kami dapat memasukkan ketergantungan menggunakan konfigurasi berbasis XML menggunakan Spring Framework.

Implementasi contoh-contoh ini dapat ditemukan di proyek GitHub - ini adalah proyek berbasis Maven, jadi semestinya mudah untuk mengimpor dan menjalankan apa adanya.