Kata pengantar
Dalam pengembangan Java yang normal, programmer perlu mengandalkan kelas lain di kelas tertentu, sehingga mereka biasanya menggunakan kelas new untuk baru dan kemudian menelepon contoh kelas. Masalah dengan perkembangan ini adalah bahwa instance kelas new tidak mudah dikelola. Spring mengusulkan gagasan injeksi ketergantungan, yaitu, kelas ketergantungan tidak dipakai oleh programmer, tetapi membantu kami new contoh melalui wadah musim semi dan menyuntikkan instance ke dalam kelas yang membutuhkan objek. Istilah lain untuk injeksi ketergantungan adalah "inversi kontrol". Pemahaman umum adalah: Biasanya kami adalah contoh new , dan kontrol contoh ini adalah programmer kami, dan inversi kontrol berarti bahwa pekerjaan instance new tidak dilakukan oleh pemrogram AS tetapi diserahkan ke wadah pegas.
Ada empat cara untuk menyuntikkan ketergantungan di musim semi
1. Set injeksi (biasanya juga disebut injeksi atribut)
2. Injeksi Konstruktor
3. Injeksi Antarmuka (ini pada dasarnya tidak digunakan sekarang)
4. Injeksi Anotasi (@Autowire)
Di bawah ini adalah contoh penggunaan injeksi metode set, injeksi konstruktor, dan injeksi anotasi.
1. Set Metode Injeksi (Injeksi Atribut)
Userdao.java
Public Class Userdao {public void insertUser (pengguna pengguna) {// Logika spesifik dihilangkan}}Userservice.java
antarmuka publik UserserService {void insertUser (pengguna pengguna);}UserserServiceImpl.java
Public Class UserServiceImpl mengimplementasikan UserserService {Userdao Userdao Private; public void setuserdao (userdao userdao) {this.userdao = userdao; } public void insertUser (pengguna pengguna) {userdao.insert (user); }}File Konfigurasi Musim Semi
<? XML Versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmls xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://wwww.springframework http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <!" BEAN </BEAN IDREADY </BEADEPOMET-BEAN "BEAN" BEAN "BEAN" BEAN "BEAN" BEAN "BEAN" BEAN "BEAN" BEAN "BEAN" name = "userdao" ref = "userdao"> </ bean> </tac>
Di atas dapat menyuntikkan userdao ke UserserServiceImpl
2. Injeksi Konstruktor
User.java
pengguna kelas publik {// Untuk kesederhanaan, tulis dua atribut nama string pribadi; usia bilangan bulat pribadi; // hilangkan metode Getter/Setter tentang nama, usia pengguna publik (nama string, int usia) {this.name = name; this.age = usia; }}Sekarang gunakan file konfigurasi pegas untuk menyuntikkan objek pengguna
<? XML Versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmls xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://wwww.springframework http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <! oMit beberapa konstruk dari penulisan konfigurasi yang tidak terkait-> <bean id =" pengguna "> <! parameter)-> <konstruktor-arg type = "java.lang.string" index = "0" value = "zhangsan"/> <constructor-arg type = "java.lang.integer" index = "1" value = "20> </bean> </bean>
Di atas dapat menyuntikkan nilai properti ke dalam objek pengguna. Tentu saja, jika Anda ingin menyuntikkan contoh menggunakan metode set, itu sebenarnya sama. Penting untuk memiliki konstruktor di UserServiceImpl , dan parameter formal adalah userdao, jadi tidak perlu untuk metode setter .
Maka penulisan file konfigurasi pegas harus diubah untuk ini
<? XML Versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmls xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://wwww.springframework http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <!-hilangkan beberapa penulisan konfigurasi yang tidak terkait-> <bean id =" userdao "<! Parameter Konstruktor dimulai dari 0 (hindari beberapa konstruktor yang memiliki jumlah parameter yang sama)-> <konstruktor-arg index = "0" ref = "userdao"> </ bean> </tac>
Ini juga dapat mencapai efek yang dicapai dengan injeksi metode yang ditetapkan di atas
3. Injeksi Anotasi
Saya belum pernah mencoba apakah itu dapat @Autowire dengan berhasil tanpa menambahkan @Component,@Service,@Controller , dll. Ke kelas -kelas ini. Namun, disarankan untuk menambahkan anotasi yang sesuai ke level yang sesuai. Dalam contoh berikut, Userdao milik lapisan modul. Di musim semi, Anda dapat menggunakan anotasi @Component .
Userdao.java
@ComponentPublic kelas userdao {public void insertUser (pengguna pengguna) {// logika spesifik dihilangkan}}Userservice.java
antarmuka publik UserserService {void insertUser (pengguna pengguna);}UserserServiceImpl.java
// memperkenalkan paket pegas yang sesuai @ServicePublic kelas UserserViceImpl mengimplementasikan UsersEverService {@Autowire private userdao userdao; public void insertUser (pengguna pengguna) {userdao.insert (user); }}File konfigurasi yang sesuai Spring
<? XML Versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmls xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://wwww.springframework http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <!-menghilangkan beberapa penulisan konfigurasi yang tidak terkait-> <!-* berarti semua paket. Dalam pengembangan aktual, Anda dapat memindai berdasarkan paket yang melibatkan komponen anotasi-> <konteks: komponen-pemindaian dasar = "*"> <!-Nyalakan pemindaian komponen-> </konteks: component-scan> <konteks: anotasi-konfigasi> <!-nyalakan prosesor annotasi-> </konteks: annotation-config> <! ID = "UserserService"/> </tobel>
Namun, selama proses pengembangan, set injeksi metode diaktifkan dan injeksi anotasi diaktifkan, musim semi akan pertama -tama memilih set injeksi, sehingga tidak lupa untuk memberikan metode set yang sesuai, jika tidak ia akan gagal.
Melalui perbandingan, injeksi anotasi jauh lebih nyaman daripada suntikan lainnya, dan lebih sedikit kode kode dan konfigurasi ditulis. Dianjurkan untuk menggunakan injeksi anotasi selama proses pengembangan.
Meringkaskan
Di atas adalah pengantar lengkap untuk beberapa metode injeksi ketergantungan di musim semi. Saya harap ini dapat membantu Anda dalam belajar atau bekerja. Jika Anda memiliki pertanyaan, Anda juga dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.