Apa itu Spring Bean?

1. Ikhtisar

Kacang adalah konsep kunci dari Kerangka Musim Semi. Dengan demikian, memahami gagasan ini sangat penting untuk memahami kerangka kerja dan menggunakannya dengan cara yang efektif.

Sayangnya, tidak ada jawaban yang jelas untuk pertanyaan sederhana - apa sebenarnya kacang musim semi itu. Beberapa penjelasan mengarah ke tingkat yang sangat rendah sehingga gambaran besar terlewat, sedangkan beberapa terlalu kabur.

Tutorial ini akan mencoba menjelaskan topik tersebut, dimulai dengan deskripsi dalam dokumentasi resmi.

2. Definisi Kacang

Berikut definisi kacang dalam dokumentasi Spring Framework:

Di Spring, objek yang membentuk tulang punggung aplikasi Anda dan yang dikelola oleh container IoC Spring disebut kacang. Kacang adalah objek yang dibuat, dirakit, dan dikelola oleh wadah Spring IoC.

Definisi ini ringkas dan langsung ke intinya, tetapi melewatkan satu hal penting - wadah Spring IoC. Mari kita telusuri lubang kelinci untuk melihat apa itu dan manfaat yang dimilikinya.

3. Pembalikan Kontrol

Sederhananya, Inversion of Control, atau singkatnya IoC, adalah proses di mana suatu objek mendefinisikan dependensinya tanpa membuatnya. Objek ini mendelegasikan tugas untuk membuat dependensi seperti itu ke container IoC.

Mari kita mulai dengan deklarasi beberapa kelas domain sebelum mempelajari IoC.

3.1. Kelas Domain

Asumsikan kita memiliki deklarasi kelas:

public class Company { private Address address; public Company(Address address) { this.address = address; } // getter, setter and other properties }

Kelas ini membutuhkan kolaborator bertipe Address :

public class Address { private String street; private int number; public Address(String street, int number) { this.street = street; this.number = number; } // getters and setters }

3.2. Pendekatan tradisional

Biasanya, kami membuat objek dengan konstruktor kelasnya:

Address address = new Address("High Street", 1000); Company company = new Company(address);

Tidak ada yang salah dengan pendekatan ini, tetapi bukankah menyenangkan untuk mengelola dependensi dengan cara yang lebih baik?

Bayangkan sebuah aplikasi dengan lusinan atau bahkan ratusan kelas. Terkadang kami ingin membagikan satu instance kelas ke seluruh aplikasi, di lain waktu kami memerlukan objek terpisah untuk setiap kasus penggunaan, dan seterusnya.

Mengelola objek sebanyak itu bukanlah mimpi buruk. Di sinilah Inversion of Control datang untuk menyelamatkan.

Alih-alih membangun dependensi dengan sendirinya, objek dapat mengambil dependensinya dari container IoC. Yang perlu kita lakukan adalah menyediakan wadah dengan metadata konfigurasi yang sesuai.

3.3. Konfigurasi Bean

Pertama, mari menghias kelas Perusahaan dengan anotasi @Component :

@Component public class Company { // this body is the same as before }

Berikut adalah kelas konfigurasi yang memasok metadata kacang ke wadah IoC:

@Configuration @ComponentScan(basePackageClasses = Company.class) public class Config { @Bean public Address getAddress() { return new Address("High Street", 1000); } }

Kelas konfigurasi menghasilkan kacang dengan tipe Address . Itu juga membawa anotasi @ComponentScan , yang menginstruksikan wadah untuk mencari kacang dalam paket yang berisi kelas Perusahaan .

Saat container IoC Spring membuat objek dari jenis tersebut, semua objek tersebut disebut Spring beans karena dikelola oleh container IoC.

3.4. IoC Beraksi

Karena kita mendefinisikan kacang dalam kelas konfigurasi, kita memerlukan sebuah instance dari kelas AnnotationConfigApplicationContext untuk membangun sebuah wadah:

ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);

Tes cepat memverifikasi keberadaan serta nilai properti biji kami:

Company company = context.getBean("company", Company.class); assertEquals("High Street", company.getAddress().getStreet()); assertEquals(1000, company.getAddress().getNumber());

Hasilnya membuktikan bahwa container IoC telah membuat dan menginisialisasi bean dengan benar.

4. Kesimpulan

Tutorial ini memberikan deskripsi singkat tentang kacang musim semi dan hubungannya dengan wadah IoC.

Kode sumber lengkap untuk tutorial ini dapat ditemukan di GitHub.