1. Java Anotasi Kustom dan Musim Semi
Anotasi Java, sebagai semacam informasi metadata elemen program (kelas, variabel anggota, metode anggota, dll.), Tidak berdampak pada pelaksanaan program itu sendiri. Melalui anotasi khusus, Anda dapat menambahkan deklarasi khusus ke elemen program.
Sebagai platform untuk membangun aplikasi tingkat perusahaan, Spring menyediakan fungsi yang kaya. Menggabungkan anotasi khusus Java dengan Spring untuk mengimplementasikan penguraian dan pemrosesan anotasi dalam skenario tertentu dapat mengurangi tingkat aplikasi kopling dan meningkatkan skalabilitas program.
2. Skenario aplikasi
Berikut ini merangkum beberapa skenario aplikasi dan hanya menjelaskan ide umum (PS: tidak semua skenario telah dipraktikkan dalam proyek)
2.1 Login, Pemblokiran Izin
Dalam proyek web, intersepsi login dan intersepsi izin adalah fungsi klise. Melalui anotasi login khusus atau anotasi izin, parse anotasi di pencegat khusus untuk mewujudkan fungsi login dan intersepsi izin.
Metode penggunaan ini memiliki konfigurasi sederhana, fleksibilitas tinggi dan kopling kode rendah.
2.2 Manajemen Tugas Waktu
Selama proses konstruksi sistem, akan ada berbagai persyaratan tugas tepat waktu, dan manajemen terpusat dari tugas -tugas waktunya dapat secara lebih efisien mempertahankan pengoperasian sistem.
Anotasi tugas waktu kustom dalam bab RepeatingAnnotations dari dokumen anotasi Java resmi, dapat mewujudkan deklarasi tugas waktu metode bisnis. Dikombinasikan dengan Container Postprocessor BeanpostProcessor (PS: Spring Container Postprocessor akan dibahas dalam artikel berikutnya), parsing anotasi khusus. Informasi anotasi yang diuraikan kemudian digunakan untuk membangun tugas waktu runtime menggunakan QuartZAPI, yang dapat menyelesaikan pembuatan runtime dan manajemen terpusat dari tugas waktu.
Metode ini dapat menghindari mendefinisikan konfigurasi tugas waktu kuarsa dan meningkatkan skalabilitas sistem.
2.3 Spesifikasi Sumber Data untuk Perutean Sumber Multi-Data
AbstractroutingDataSource yang disediakan oleh Spring mengimplementasikan perutean dinamis dari beberapa sumber data dan dapat diterapkan di bawah arsitektur pemisahan master-slave. Dengan menentukan sumber data yang berbeda untuk metode yang berbeda, rute dinamis sumber data direalisasikan (misalnya: metode membaca berubah dari sumber data basis data slave, metode penulisan berubah dari sumber data database utama). Cara mengidentifikasi tipe sumber data yang sesuai dengan metode yang berbeda dapat diimplementasikan menggunakan anotasi khusus. Fungsi perutean sumber data direalisasikan dengan menganalisis tipe sumber data yang sesuai yang dinyatakan pada metode ini.
Metode ini menghindari penguraian metode pencocokan pola (misalnya: dimulai dengan pilih, dimulai dengan pembaruan, dll.), Dan deklarasi lebih fleksibel.
Anotasi khusus
Mari kita lihat contoh paling sederhana. Dalam proses menggunakan aplikasi Springweb, kami pasti menggunakan @Controller, @Service, @Repository dan anotasi lainnya untuk mendefinisikan JavaBeans. Jadi bagaimana Anda bisa mendefinisikan anotasi sendiri? Pegas dapat memuat secara otomatis. Jadi ada contoh pertama.
@Target ({elementType.type})@retention (retentionpolicy.runtime)@didokumentasikan@componentpublic @interface myComponent {string value () default "";} @ConfigurationPublic kelas ComponentAnnotationTest {public static void main (string [] args) {annotationConfigApplicationContext annotationConfigApplicationContext = new annotationConfigLicationContext (); annotationConfigapplicationContext.register (compononnotation (); annotationConfigapplicationContext.register (component.register (); compononponclicationContext.register (); AnnotationConfigappLicationContext.Refresh (); Injectclass injectclass = annotationConfigApplicationContext.getBean (injectclass.class); injectclass.print (); } @MyComponent Public Static Class InjectClass {public void print () {System.out.println ("Hello World"); }}}Jalankan contoh ini dan Anda akan menemukan bahwa kelas yang dianotasi oleh @MyComponent juga dimuat oleh Spring dan dapat digunakan secara normal sebagai Javabean biasa. Memeriksa kode sumber Spring, Anda akan menemukan bahwa Spring menggunakan ClassPathScanningCandIdateComponentProvider untuk memindai paket. Kelas ini memiliki penjelasan seperti itu.
Penyedia komponen yang memindai classpath dari paket dasar. Kemudian berlaku mengecualikan dan menyertakan filter ke kelas yang dihasilkan untuk menemukan kandidat.
Metode RegisterDefaultFilters dari kelas ini memiliki beberapa baris kode
Void RegisterDefaultFilters () yang dilindungi () {this.includefilters.add (annotationTypeFilter baru (component.class)); Classloader cl = classpathscanningCandIdateComponentProvider.class.getClassLoader (); coba {this.includefilters.add (annotationTypeFilter baru (((kelas <? Extends annotation>) classutils.forname ("javax.annotation.managedbean", cl)), false)); Logger.debug ("JSR-250 'javax.annotation.Managedbean' ditemukan dan didukung untuk pemindaian komponen"); } catch (ClassNotFoundException ex) {// JSR -250 1.1 API (seperti yang termasuk dalam Java EE 6) tidak tersedia - cukup lewati. } coba {this.includefilters.add (annotationTypeFilter baru (((kelas <? Extends annotation>) classutils.forname ("javax.inject.named", cl)), false)); Logger.debug ("JSR-330 'javax.inject.named' Annotation ditemukan dan didukung untuk pemindaian komponen"); } catch (ClassNotFoundException ex) {// JSR -330 API Tidak tersedia - Cukup lewati. }}Di sini Anda akan menemukan bahwa penggunaan informasi kelas pemindaian musim semi hanya akan menilai kelas yang dianotasi oleh @Component, sehingga setiap anotasi khusus dapat dipindai oleh musim semi dan disuntikkan ke dalam wadah selama itu dilengkapi dengan @component (tentu saja, harus ada nilai string () default ""; karena metode Spring adalah unik yang ditandai dengan beanname).
Meringkaskan
Di atas adalah semua tentang diskusi singkat artikel ini tentang penerapan anotasi khusus di musim semi, saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!