File konfigurasi
Dalam contoh sebelumnya, kami menggunakan definisi XML Bean untuk mengonfigurasi komponen. Dalam proyek yang sedikit lebih besar, biasanya ada ratusan komponen. Jika komponen -komponen ini dikonfigurasi menggunakan definisi XML Bean, itu jelas akan meningkatkan ukuran file konfigurasi, membuatnya tidak terlalu nyaman untuk menemukan dan memelihara.
Spring 2.5 memperkenalkan mekanisme pemindaian komponen otomatis untuk kami. Ini dapat menemukan kelas yang dijelaskan dengan @Component, @Service, @Controller, dan anotasi @Repository di bawah ClassPath, dan memasukkan kelas -kelas ini ke dalam wadah musim semi untuk dikelola.
Fungsinya sama dengan menggunakan komponen konfigurasi node kacang dalam file XML. Untuk menggunakan mekanisme pemindaian otomatis, kita perlu membuka informasi konfigurasi berikut:
<? 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.spramework.org http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd "> <Konteks: Komponen-scan-pACKAGE =" CN.ITTEX "/</>
Konfigurasi <context:component-scan base-package="cn.itcast" /> konfigurasi secara implisit mendaftarkan beberapa prosesor yang menguraikan anotasi, termasuk <konteks: <context:annotation-config/> <context:component-scan base-package="cn.itcast" /> yang terdaftar dengan konfigurasi, yaitu, jika ada konfigurasi. Selain itu, paket dasar adalah paket (subpackage) yang perlu dipindai.
anotasi
@Service digunakan untuk memberi anotasi komponen lapisan bisnis, @Controller digunakan untuk memberi anotasi komponen lapisan kontrol (seperti tindakan di Struts2), dan @Repository digunakan untuk membubuhi ikatan komponen akses data, yaitu komponen DAO. @Component mengacu pada komponen. Ketika komponen tidak mudah diklasifikasikan, kita dapat menggunakan anotasi ini untuk membuat anotasi.
Artikel ini didasarkan pada kasus anotasi @Autowire dan perakitan otomatis.
Kami pertama -tama mengubah file konfigurasi Spring menjadi:
<? 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.spramework.org http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd "> <Konteks: Komponen-scan-pACKAGE =" CN.ITTEX "/</>
Contoh
Kemudian gunakan anotasi @Service untuk membuat anotasi kelas PersonserviceBean, sebagai berikut:
@ServicePublic kelas PersonserviceBean mengimplementasikan Personservice {private persondao persondao; public void setpersondao (persondao persondao) {this.persondao = persondao; } @Override public void save () {persondao.add (); }}Annotate The Persondaobean Class menggunakan anotasi @Repository, sebagai berikut:
@RepositoryPublic kelas persondaobean mengimplementasikan persondao {@override public void add () {System.out.println ("Jalankan metode add () di persondaobean"); }}Akhirnya, kami memodifikasi Kode Kelas SpringTest menjadi:
Public Class SpringTest {@test public void instancespring () {AbstractAppLicationContext ctx = classPathxMlapplicationContext baru ("beans.xml"); Personservice Personservice = (Personservice) ctx.getbean ("PersonserviceBean"); Persondao persondao = (persondao) ctx.getbean ("persondaobean"); System.out.println (Personservice); System.out.println (persondao); ctx.close (); }}Uji metode instancespring () dan Anda dapat melihat bahwa konsol Eclipse mencetak:
Jika kami ingin menggunakan nama yang ditentukan untuk mendapatkannya, kami dapat memodifikasi kode kelas PersonserviceBean menjadi:
@Service ("Personservice") Kelas Publik PersonserviceBean mengimplementasikan Personservice {private persondao persondao; public void setpersondao (persondao persondao) {this.persondao = persondao; } @Override public void save () {persondao.add (); }}Dengan cara ini, Kode Kelas SpringTest harus diubah menjadi:
Public Class SpringTest {@test public void instancespring () {AbstractAppLicationContext ctx = classPathxMlapplicationContext baru ("beans.xml"); Personservice Personservice = (Personservice) ctx.getbean ("Personservice"); System.out.println (Personservice); ctx.close (); }}Uji metode instancespring () dan Anda dapat melihat bahwa konsol Eclipse mencetak:
Kami telah mempelajari ruang lingkup kacang yang dikelola musim semi sebelumnya, dan kami dapat mengetahui bahwa ruang lingkup dua kacang yang dikelola musim semi di atas adalah singleton secara default. Tentu saja, kita juga dapat mengubah ruang lingkup kacang yang dikelola musim semi, seperti mengubah kode kelas PersonserviceBean menjadi:
@Service ("Personservice") @scope ("Prototipe") Public Class PersonserviceBean mengimplementasikan Personservice {private persondao persondao; public void setpersondao (persondao persondao) {this.persondao = persondao; } @Override public void save () {persondao.add (); }}Ini berarti bahwa ruang lingkup PersonserviceBean yang dikelola oleh Spring telah menjadi prototipe. Saat ini, kami memodifikasi kode kelas SpringTest menjadi:
Public Class SpringTest {@test public void instancespring () {AbstractAppLicationContext ctx = classPathxMlapplicationContext baru ("beans.xml"); Personservice Personservice1 = (Personservice) ctx.getbean ("Personservice"); Personservice Personservice2 = (Personservice) ctx.getbean ("Personservice"); System.out.println (Personservice1 == Personservice2); ctx.close (); }}Uji metode instancespring () dan Anda dapat melihat bahwa konsol Eclipse mencetak:
Lingkup prototipe berarti bahwa setiap kali Anda mendapatkan kacang dari wadah musim semi, itu adalah objek baru.
Jika komponen termasuk dalam wadah pegas dengan memindai secara otomatis di bawah jalur ClassPath, bagaimana menentukan metode inisialisasi dan metode penghancuran kacang? Pada saat ini, kita perlu menggunakan dua anotasi: @PostConstruct dan @predestroy. Untuk eksperimen, kami memodifikasi Kode Kelas PersonserviceBean menjadi:
@Service ("Personservice") Kelas Publik PersonserviceBean mengimplementasikan Personservice {private persondao persondao; @PostConstruct public void init () {System.out.println ("Inisialisasi sumber daya"); } @Predestroy public void wrash () {System.out.println ("Destroy, Close Resource"); } public void setpersondao (persondao persondao) {this.persondao = persondao; } @Override public void save () {persondao.add (); }}Selanjutnya, kita perlu memodifikasi kode kelas SpringTest menjadi:
Public Class SpringTest {@test public void instancespring () {AbstractAppLicationContext ctx = classPathxMlapplicationContext baru ("beans.xml"); Personservice Personservice = (Personservice) ctx.getbean ("Personservice"); ctx.close (); }}Dengan cara ini, uji metode instancespring () dan konsol gerhana akan mencetak:
Untuk melihat kode sumber, klik untuk membiarkan Spring secara otomatis memindai dan mengelola kacang untuk diunduh.
Meringkaskan
Di atas adalah paket pemindaian pegas otomatis yang diperkenalkan oleh editor. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!