Saya belum menemukan definisi tingkat tinggi dari kacang Spring yang dapat saya mengerti. Saya melihat mereka sering dirujuk dalam dokumentasi dan buku-buku Grails, tetapi saya pikir memahami apa itu akan bermanfaat. Jadi, apa itu kacang Spring? Bagaimana mereka bisa digunakan? Apakah ada hubungannya dengan Injeksi Ketergantungan?
398
Jawaban:
Lebih banyak belajar tentang kacang dan ruang lingkup dari SpringSource :
* IoC: Pembalikan Kontrol
sumber
@Autowired
? Atau hanya ketika saya melakukan tugas sayaimport
?Kacang pegas adalah objek instan yang dikelola oleh wadah Spring, yaitu, mereka dibuat dan ditransfer oleh kerangka kerja dan dimasukkan ke dalam "kantong benda" (wadah) dari mana Anda bisa mendapatkannya nanti.
Bagian "perkabelan" di sana adalah apa yang dimaksud dengan injeksi ketergantungan, apa artinya adalah Anda hanya bisa mengatakan "Saya akan membutuhkan hal ini" dan kerangka kerja akan mengikuti beberapa aturan untuk memberi Anda contoh yang tepat.
Untuk seseorang yang tidak terbiasa dengan Spring, saya pikir artikel Wikipedia Spring memiliki deskripsi yang bagus :
sumber
Pertama mari kita pahami Spring:
Musim semi adalah kerangka kerja yang ringan dan fleksibel.
Analogi:
Bean: adalah objek, yang dibuat, dikelola, dan dihancurkan di Spring Container. Kami dapat menyuntikkan objek ke Spring Container melalui metadata (baik xml atau anotasi), yang disebut inversi kontrol.
Analogi: Mari kita asumsikan petani memiliki lahan pertanian yang ditanami dengan biji (atau kacang-kacangan). Di sini, Farmer adalah Spring Framework, Farmland land adalah Spring Container, Beans adalah Spring Beans, Budidaya adalah Spring Processors.
Seperti siklus hidup kacang, kacang musim semi juga memiliki siklus hidupnya sendiri.
sumber img
Berikut ini adalah urutan siklus hidup kacang di Musim Semi:
Instantiate: Pertama wadah musim semi menemukan definisi kacang dari file XML dan instantiates bean.
Populate properties: Menggunakan injeksi dependensi, spring mengisi semua properti seperti yang ditentukan dalam definisi bean.
Set Bean Name: Jika bean mengimplementasikan
BeanNameAware
antarmuka, pegas meneruskan id kacang kesetBeanName()
metode.Set Bean factory: Jika Bean mengimplementasikan
BeanFactoryAware
antarmuka, pegas melewatkan beanfactory kesetBeanFactory()
metode.Pra-Inisialisasi: Disebut juga post process of bean. Jika ada kacang BeanPostProcessors terkait dengan kacang,
postProcesserBeforeInitialization()
metode panggilan Spring .Inisialisasi kacang: Jika kacang mengimplementasikan
IntializingBean
,afterPropertySet()
metodenya disebut. Jika kacang memiliki deklarasi metode init, metode inisialisasi yang ditentukan dipanggil.Pasca Inisialisasi: - Jika ada yang
BeanPostProcessors
terkait dengan kacang,postProcessAfterInitialization()
metode mereka akan dipanggil.Siap digunakan: Sekarang kacang siap digunakan oleh aplikasi
Hancurkan: Jika kacang diimplementasikan
DisposableBean
, itu akan memanggildestroy()
metodesumber
Yah Anda memahaminya sebagian. Anda harus menyesuaikan kacang sesuai dengan kebutuhan Anda dan menginformasikan wadah Musim Semi untuk mengelolanya saat diperlukan, dengan menggunakan metodologi yang dikenal sebagai IoC ( Inversion of Control ) yang diciptakan oleh Martin Fowler , juga dikenal sebagai Dependency Injection (DI).
Anda memasang biji dengan cara tertentu, sehingga Anda tidak harus merawat instantiating atau mengevaluasi ketergantungan pada kacang. Ini dikenal sebagai Prinsip Hollywood .
Google adalah alat terbaik untuk mengeksplorasi lebih lanjut tentang ini selain tautan Anda akan kebanjiran di sini dalam pertanyaan ini. :)
sumber
Spring memiliki wadah IoC yang membawa Bag of Bean; pemeliharaan dan penghapusan kreasi adalah tanggung jawab Spring Container. Kita bisa memasukkan kacang ke Spring oleh Wiring dan Auto Wiring. Pengkabelan berarti kita mengkonfigurasi secara manual ke dalam file XML dan "Pengkabelan Otomatis" berarti kita meletakkan anotasi dalam file Java lalu Spring secara otomatis memindai konteks akar di mana file konfigurasi java, membuatnya dan memasukkannya ke dalam kantong Spring.
Berikut ini rincian URI tempat Anda mendapatkan informasi lebih lanjut tentang Kacang
sumber
Kacang semi adalah kelas. Alih-alih membuat instance kelas (menggunakan
new
), Anda mendapatkan contoh sebagaibean
pemain untuk tipe kelas Anda dari konteks aplikasi, di mana kacang adalah apa yang Anda konfigurasikan dalam konfigurasi konteks aplikasi. Dengan cara ini, seluruh aplikasi mempertahankan instance singleton-scope di seluruh aplikasi. Semua kacang diinisialisasi mengikuti pesanan konfigurasi mereka tepat setelah konteks aplikasi instantiated. Bahkan jika Anda tidak mendapatkan kacang apa pun dalam aplikasi Anda, semua instance kacang sudah dibuat sesaat setelah Anda membuat konteks aplikasi.sumber
Kacang musim semi hanyalah contoh objek yang dikelola oleh wadah Musim Semi IOC.
Spring IOC container membawa Bag of Bean. Kreasi, pemeliharaan, dan penghapusan Bean adalah tanggung jawab Spring Container.
Kita bisa memasukkan kacang ke Spring oleh Wiring dan Auto Wiring.
Pengkabelan berarti kami mengkonfigurasinya secara manual ke dalam file XML.
Pengkabelan otomatis berarti kita meletakkan anotasi dalam file Java lalu Spring secara otomatis memindai konteks root di mana file konfigurasi java, membuatnya dan dimasukkan ke dalam kantong Spring.
sumber
A Bean adalah POJO (Plain Old Java Object), yang dikelola oleh wadah pegas.
Wadah musim semi hanya membuat satu instance kacang secara default. Kacang ini di-cache dalam memori sehingga semua permintaan kacang akan mengembalikan referensi yang dibagikan ke kacang yang sama.
Anotasi @Bean mengembalikan objek yang muncul register sebagai kacang dalam konteks aplikasi. Logika di dalam metode bertanggung jawab untuk membuat instance.
Kapan kita menggunakan anotasi @Bean?
Ketika konfigurasi otomatis bukan opsi. Misalnya ketika kita ingin mengirim komponen dari pustaka pihak ketiga, karena kode sumber tidak tersedia sehingga kita tidak dapat membubuhi keterangan kelas dengan @Component.
Skenario waktu nyata adalah seseorang ingin terhubung ke Amazon S3 bucket. Karena sumbernya tidak tersedia, ia harus membuat @bean.
Sumber untuk kode di atas -> https://www.devglan.com/spring-mvc/aws-s3-java
Karena saya menyebutkan @Component Annotation di atas.
@Component Menunjukkan bahwa kelas beranotasi adalah "komponen". Kelas semacam itu dianggap sebagai kandidat untuk deteksi otomatis ketika menggunakan konfigurasi berbasis anotasi dan pemindaian jalur kelas.
Anotasi komponen mendaftarkan kelas sebagai satu kacang.
sumber
Di Musim Semi, objek yang membentuk tulang punggung aplikasi Anda dan yang dikelola oleh wadah Spring IoC disebut sebagai kacang. Kacang hanya objek yang dipakai, dirakit dan dikelola oleh wadah Spring IoC;
sumber
Buku: Just Spring
sumber
Konfigurasi XML Spring terdiri dari Beans dan Beans pada dasarnya adalah kelas. Itu hanya POJO yang kami gunakan di dalam ApplicationContext kami. Mendefinisikan Kacang dapat dianggap sebagai mengganti kata kunci baru. Jadi di mana pun Anda menggunakan kata kunci baru di aplikasi Anda, seperti:
Di mana Anda menggunakan kata kunci baru itu di suatu tempat Anda dapat melihat menghapus konfigurasi itu dan menempatkannya dalam file XML. Jadi kita akan kode seperti ini:
Sekarang kita cukup menggunakan Setter Injection / Constructor Injection. Saya menggunakan Setter Injection.
sumber