Jika tidak ada metode dan tugas untuk membaca anotasi, maka anotasi tidak akan lebih berguna daripada anotasi. Bagian penting dari proses penggunaan anotasi dibuat menggunakan prosesor anotasi. Javase5 memperluas API mekanisme refleksi untuk membantu pemrogram dengan cepat membangun prosesor anotasi khusus.
Perpustakaan kelas prosesor beranotasi (java.lang.reflect.annotatedElement):
Java menggunakan antarmuka anotasi untuk mewakili anotasi di depan elemen program, yang merupakan antarmuka induk dari semua jenis anotasi. Selain itu, Java telah menambahkan AnnotatedElement Interface di bawah paket Java.lang.Reflect. Antarmuka ini mewakili elemen program yang dapat menerima anotasi dalam program. Antarmuka terutama memiliki kelas implementasi berikut:
Kelas: Definisi Kelas
Konstruktor: Definisi Konstruktor
Bidang: Definisi Variabel Anggota Kumulatif
Metode: Definisi Metode Kelas
Paket: Definisi Paket Kelas
Paket java.lang.reflect terutama berisi beberapa kelas alat yang menerapkan fungsi refleksi. Faktanya, semua API refleksi yang disediakan oleh paket java.lang.reflect memperluas kemampuan untuk membaca informasi anotasi runtime. Ketika jenis anotasi didefinisikan sebagai anotasi saat runtime, anotasi hanya dapat terlihat saat runtime, dan anotasi yang disimpan dalam file kelas ketika file kelas dimuat akan dibaca oleh mesin virtual.
AnnotatedElement Interface adalah antarmuka induk dari semua elemen program (kelas, metode dan konstruktor). Oleh karena itu, setelah program memperoleh objek EnotatedElement dari kelas tertentu melalui refleksi, program dapat memanggil empat metode objek berikut untuk mengakses informasi anotasi:
Metode 1: <textendsannotation> tgetAnnotation (kelas <T> annotationclass): Mengembalikan anotasi dari jenis yang ditentukan yang ada pada elemen program. Jika anotasi jenis tidak ada, kembalikan nol.
Metode 2: Anotasi [] getAnnotations (): Mengembalikan semua anotasi yang ada pada elemen program.
Metode 3: BooleanisAnnotationPresent (kelas <? ExtendSannotation> AnnotationClass): Menentukan apakah elemen program berisi anotasi dari jenis yang ditentukan. Jika ada, itu akan mengembalikan true, jika tidak, ia akan mengembalikan false.
Metode 4: Anotasi [] getDeclaredAnnotations (): Mengembalikan semua komentar yang ada langsung pada elemen ini. Tidak seperti metode lain dalam antarmuka ini, metode ini mengabaikan anotasi yang diwariskan. (Jika tidak ada komentar langsung pada elemen ini, array panjang nol dikembalikan.) Penelepon metode dapat memodifikasi array yang dikembalikan sesuka hati; Ini tidak akan berpengaruh pada array yang dikembalikan oleh penelepon lain.
Prosesor anotasi sederhana:
/********************* Deklarasi Anotasi ************************** ***NAMA BUapan Anotasi*@Author peida**/ @target (elementType.field) @retention (retentionPolicy.runtime) @documentedpublic @interface fruitname {string value () peeDeMault) @documentedpublic @interface fruitname {string value value () */ @Target (elementType.field) @retention (retentionpolicy.runtime) @documentedpublic @interface fruitcolor {/** * color enum * @author peida * */public enum color {bule, merah, hijau};/** Atribut warna * @return */color fruitcolor () * DEFAULT () ** DEFaUrt; DEFAULT () @Ritner/color pufok () **; @Author peida**/ @target (elementType.field) @retention (retentionpolicy.runtime) @documentedpublic @interface fruitprovider {/*** nomor pemasok* @return*/public int iD () default -1;/** nama pemasok* @return*/nama string publik () Default -1; "";}/**************** Annotation uses **********************/public class Apple {@FruitName("Apple") private String appleName;@FruitColor(fruitColor=Color.RED) private String appleColor;@FruitProvider(id=1,name="Shaanxi Hongfuji Group",address="Hongfuji Building, No. 89, Yan'an Road, Xi'an City, Shaanxi Province") private String appleProvider;public void setAppleColor(String appleColor) {this.appleColor = appleColor;}public String getAppleColor() {return appleColor;}public void setAppleName(String appleName) {this.appleName = appleName;}public String getAppLeName () {return applename;} public void setAppleProvider (String appleProvider) {this.appleProvider = appleProvider;} string publik getAppleProvider () {return appleProvider;} public void displayName () {System.out.println ("nama buah adalah buah publicname () () {System.out.println (" nama buah adalah buahnya: Buahnya: () {System.out.println ("Nama Buah Public; processor*************************/public class FruitInfoUtil {public static void getFruitInfo(Class<?> clazz){String strFruitName=" Fruit name: ";String strFruitColor=" Fruit color: ";String strFruitProvicer="Supplier information: ";Field[] fields = clazz.getDeclaredFields();for (Field field : Fields) {if (field.isannotationPresent (Fruitname.class)) {Fruitname FruitName = (FruitName) Field.getannotation (Fruitname.class); strfruitname = strfruitname+fruitname.value (); System.out.println (strfruitname); if (field.isannotationPresent (fruitcolor.class)) {fruitcolor fruitcolor = (fruitcolor) field.getannotation (fruitcolor.class); strfruitColor = strfruitcolor+fruitcolor.fruitcolor (); tostring (); System.out.proteColor.fruitcolor (); tostring (); System.out.progrape.progrip.fruitcolor (); tostring (); System.out.progrape.progrip.fruitcolor (); tostring (); System.out.progrape.progrip.fruitcolor (); tostring (); System.out.prograping if (field.isannotationPresent (Fruitprovider.class)) {Fruitprovider Fruitprovider = (FruitProvider) Field.getAnnotation (Fruitprovider.class); strfruitprovicer = "Nomor Pemasok:"+FruitProvider.id ()+"Nama Pemasok:"+Fruitprovider.name () ()+"+"+" "+FruitProvider.Address (); System.out.println (StrfruitProvicer);}}}}/************* Hasil output ****************************/Public Class FruitRun {/***@param args*/public static void Main static [] [STRING [] {/** {FruitInfoUtil.getFruitInfo(Apple.class);}}======================================================= Fruit name: Apple Fruit color: RED Supplier number: 1 Supplier name: Shaanxi Hongfuji Group Supplier address: Bangunan Hongfuji, No. 89, Yan'an Road, Kota Xi'an, Provinsi ShaanxiSaya pada dasarnya membaca poin pengetahuan dasar anotasi Java (lihat peta di bawah). Pada artikel berikutnya, kami merancang kerangka kerja ORM sederhana berdasarkan anotasi untuk secara komprehensif menerapkan dan semakin memperdalam pemahaman dan penerapan berbagai titik pengetahuan anotasi.
Meringkaskan
Di atas adalah semua tentang contoh sederhana prosesor anotasi Java dalam artikel ini, 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!