Sebelum membaca artikel ini, pertama -tama Anda dapat merujuk pada artikel " Pemahaman Sederhana tentang Contoh IOC dan AOP dan Kode Musim Semi " untuk belajar tentang IOC dan AOP di musim semi. Mari kita ke topik. Artikel ini memperkenalkan cara mendefinisikan dan memuat kacang java di musim semi.
Skenario Bisnis
Ini juga contoh orang yang mengemudi. Pertama, tentukan antarmuka mobil dan dua menerapkan Benz dan BMW, dan kemudian tentukan kelas seseorang, yang tergantung pada antarmuka mobil.
Mobil antarmuka publik {void go ();} kelas publik Benz mengimplementasikan mobil {public void go () {System.out.println ("Benz Go ..."); }} BMW kelas publik mengimplementasikan mobil {public void go () {System.out.println ("BMW Go ..."); }} orang kelas publik {string name = ""; Mobil mobil = nol; mobil umum getCar () {return car; } public void setCar (mobil mobil) {this.car = mobil; } orang publik (nama string) {this.name = name; } public void drive () {System.out.println (name+"sedang mengemudi ..."); muatan(); }}Di kelas orang kita dapat melihat bahwa objek mobil adalah objek dependen dari kelas ini dan perlu disuntikkan ke dalam kelas orang melalui metode konstruktor. Kode di atas masih belum memiliki bayangan musim semi. Mari kita lihat bagaimana Spring menyuntikkannya.
Tambahkan dependensi musim semi
Saat ini, banyak proyek berlaku untuk Maven untuk mengelola dependensi, dan hal yang sama berlaku untuk proyek ini. Saya akan menambahkan simpul ketergantungan ke pom.xml
<dependency> <GroupId> org.springframework </groupId> <ArTifactId> Spring-core </arttifactid> <version> 3.2.6.release </version> </dependency> <dependency> </org.springframework </groupid> <ArtiFacTid> Spring-beans </Artifactid> </groupid </version </version </version </version> <criprene- version </version> </version </version> </version </versi </version> </artifactid </version </version </version. <groupId> org.springframework </groupid> <ArTifactId> Spring-Context </artifactid> <version> 3.2.6.release </version> </dependency> <dependency> <groupid> org.springframework </roupid> <Artifactid> Spring-Context </artifactid> </groupid> <ArTifactid> Spring-Context </artifactid> </gruprency> <ArTifactId> Spring-Context </artifactid> </version. <groupId> org.springframework </groupid> <ArTifactId> spring-context-support </artifactid> <version> 3.2.6.release </version> </dependency>
Masukkan node ketergantungan ini ke dalam simpul dependensi file pom.xml, dan Eclipse akan secara otomatis mengunduh paket yang relevan ke lokasi default.
Tentukan dan merakit kacang secara manual
Buat file XML baru bernama bean.xml di direktori root proyek, dengan konten berikut:
<? Xml Version = "1.0" encoding = "utf-8"?> <! Doctype bean public "-// spring // dtd bean // en" "http://www.springframework.org/dtd/spring beans.dtd"> <bean> <bean id id = "car"> <"ID <" <"<bean" <bean> <bean iD = "car"> <"" ID "" car "> /> <name properti = "mobil" ref = "car" /> </t bean> </tac>
File XML di atas pertama -tama mendefinisikan kacang dengan id sebagai mobil, dan kacang dengan id sebagai tom. Mobil adalah ketergantungan Tom dan secara manual dirakit ke atribut mobil Tom melalui <properti nama = "mobil" ref = "car" />.
Perilaku menciptakan hubungan kolaboratif antara objek aplikasi disebut kabel, yang juga merupakan inti dari ketergantungan pada injeksi objek.
Selanjutnya, kami instantiate objek konteks aplikasi dalam metode utama dan mendapatkan node tom dalam kacang.
aplikasi kelas publik {public static void main (string [] args) {applicationContext context = new ClassPathXMLapPlicationContext ("bean.xml"); Orang tom = (orang) context.getbean ("tom"); tom.drive (); }}Jalankan program dan hasil output adalah:
Tom sedang mengemudi ... bmw pergi ...
Perakitan otomatis
Ulangi lagi, perilaku menciptakan hubungan kolaboratif antara objek aplikasi disebut kabel, daripada proses instantiasi objek. Dalam file XML di atas, saya menyusun objek dependensi dengan <properti name = "car" ref = "car" />, tetapi dengan pengembangan aplikasi yang berkelanjutan, file konfigurasi XML pasti akan menjadi semakin kompleks. Cara kita mengaitkan kacang dengan mobil ID melalui ref = "mobil" telah mulai tertinggal. Selanjutnya, saya akan memperkenalkan bagaimana Spring mengimplementasikan kacang perakitan otomatis.
Jenis Perakitan Otomatis
Spring memiliki empat strategi perakitan. Untuk mengurangi kompleksitas artikel ini, saya akan memperkenalkan dua strategi yang umum digunakan, metode byname dan metode bytype. Seperti namanya, metode byname adalah untuk melihat apakah nama atribut dan ID kacang adalah sama. Dalam contoh ini, kelas orang memiliki atribut yang disebut mobil. Jika atribut kelas atau perubahan diatur ke perakitan otomatis dan kebijakan perakitan adalah byname, Spring akan mencari kacang dengan mobil ID (harus dengan nama yang sama). Metode bytype adalah membandingkan apakah jenisnya sama. Dalam contoh ini, jika atribut mobil kelas orang atau kelas orang diatur ke rakitan otomatis dan kebijakan perakitan adalah bytype, karena atribut mobil adalah tipe mobil, pegas akan mencari kacang jenis mobil atau subkelasnya saat auto-assembly.
Gunakan XML untuk mengimplementasikan perakitan otomatis
Selanjutnya saya akan memodifikasi kode dan menggunakan metode konfigurasi XML untuk mencapai perakitan otomatis.
<? Xml Version = "1.0" encoding = "utf-8"?> <! Doctype bean public "-// spring // dtd bean // en" "http://www.springframework.org/dtd/spring beans.dtd"> <bean> <bean id iD = "car" = "" "" " <konstruktor-arg value = "tom"/> </t bean> </tac>
Kelas orang tidak memerlukan modifikasi apa pun.
Pertama, saya menghapus baris kode <propertiyname = "car" ref = "car"/> karena ini cara manual. Kemudian, saya menambahkan properti autowire = "byname" ke kacang dengan ID, dan atur untuk secara otomatis merakit ketergantungan dengan nama. Saat mendapatkan objek orang, semua nama properti orang memiliki makna khusus. Spring memantau atribut lain yang disebut mobil di kelas orang, dan menemukan kacang dengan mobil ID di file konfigurasi, sehingga secara otomatis dirakit menjadi atribut mobil orang.
Perakitan otomatis melalui anotasi
Kami membuat modifikasi berikut untuk bean.xml
<? Xml Version = "1.0" Encoding = "UTF-8"?> <! Doctype Beans Public "-// Spring // Dtd Bean // en" "http://www.springframework.org/dtd/spring-eans.dtd"> iDeans-autowire =" By = "By =" By = "IDTD" IDTD "IDEAN" IDTD " <konstruktor-arg value = "tom"/> </t bean> </tac>
Hapus atribut autoWire = "byname" dari kacang dengan id tom, dan kemudian tambahkan atribut default-autowire = "byname" ke node kacang untuk mengatur nilai default dari metode perakitan otomatis semua kacang yang ditentukan dalam file ke byname. Kemudian buat beberapa modifikasi pada kelas orang dan tambahkan anotasi @Autowired ke metode setter mobil untuk memberi tahu Spring untuk secara otomatis merakit properti. Rerun kode dan hasil output tetap tidak berubah.
@AutowiredPublic void setCar (mobil mobil) {this.car = car;}Jika Anda menerapkan perakitan otomatis melalui anotasi, Anda harus terlebih dahulu mengatur metode perakitan otomatis default pada akar kacang, dan kemudian Anda tidak perlu mengkonfigurasi atribut autowire untuk setiap kacang yang membutuhkan perakitan otomatis dalam file konfigurasi (jika metode tidak konsisten dengan default, Anda masih dapat mengkonfigurasinya secara terpisah untuk mengesampingkan metode perakitan otomatis). Metode anotasi lebih halus, dan dapat mengontrol tingkat atribut kacang yang perlu dirakit secara otomatis.
Dalam semua kode di atas, kami menggunakan kelas org.zdk.springproj1.bmw sebagai ketergantungan kelas orang. Jika kelas orang tidak perlu mengendarai BMW karena kebutuhan bisnis, perlu untuk mengubah konfigurasi menjadi org.zdk.springproj1.benz, tanpa memodifikasi kode Java apa pun. Ini adalah kekuatan musim semi sebagai wadah IOC.
Meringkaskan
Di atas adalah semua penjelasan terperinci tentang definisi pegas dan kacang perakitan dalam artikel ini. Saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke situs ini:
Java Spring Annotation Configuration Bean Instal Analisis Kode
Penjelasan terperinci tentang siklus hidup penggunaan konfigurasi pegas
Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!