Prinsip Anotasi Java
Java: Gunakan anotasi, //www.vevb.com/article/101747.htm
Apa itu anotasi
Anotasi juga disebut metadata, seperti @Override umum kami dan @Deprecated. Anotasi adalah fitur yang diperkenalkan dalam versi JDK1.5. Mereka digunakan untuk menjelaskan kode dan dapat memberi anotasi paket, kelas, antarmuka, bidang, parameter metode, variabel lokal, dll. Fungsi utamanya adalah sebagai berikut:
Anotasi umum dapat dibagi menjadi tiga kategori:
Salah satu kategori adalah anotasi standar yang datang dengan Java, termasuk @Override, @Deprecated dan @suppresswarnings, yang digunakan untuk menunjukkan bahwa metode tertentu ditulis ulang, kelas atau metode tertentu sudah ketinggalan zaman, dan peringatan untuk diabaikan. Setelah anotasi ini ditandai, kompiler akan memeriksanya.
Salah satu jenisnya adalah anotasi meta. Anotasi meta adalah anotasi yang digunakan untuk mendefinisikan anotasi, termasuk @retention, @target, @inherited, @documented. @Retention digunakan untuk menunjukkan tahap di mana anotasi dipertahankan, @target digunakan untuk menunjukkan ruang lingkup anotasi yang digunakan, @inHerited digunakan untuk menunjukkan bahwa anotasi dapat diwarisi, dan @Documented digunakan untuk menunjukkan apakah akan menghasilkan dokumen Javadoc.
Satu jenis adalah anotasi khusus. Anda dapat mendefinisikan anotasi sesuai dengan kebutuhan Anda sendiri dan menggunakan anotasi meta untuk anotasi anotasi khusus.
Prinsip Anotasi:
Mari kita lihat bagaimana mendukung anotasi di bawah sistem Java. Mari kita kembali ke contoh anotasi khusus di atas. Untuk tes anotasi, sebagai berikut. Jika Anda memberi anotasi pada kelas anotasi, nilai deklarasi anotasi dapat diperoleh melalui annotationtest.class.getannotation (test.class) di runtime. Dapat dilihat dari kalimat di atas bahwa ia memperoleh anotasi uji dari struktur kelas, jadi pasti anotasi ditambahkan ke struktur kelas pada suatu waktu.
@Test ("test") Public Class AnnotationTest {public void test () {}}Dari kode sumber Java ke bytecode kelas dilakukan oleh kompiler. Kompiler akan mengurai kode sumber Java dan menghasilkan file kelas. Anotasi juga diproses oleh kompiler pada waktu kompilasi. Kompiler akan memproses simbol anotasi dan melampirkannya ke struktur kelas. Menurut spesifikasi JVM, struktur file kelas adalah format yang dipesan secara ketat. Satu -satunya cara untuk melampirkan informasi ke struktur kelas adalah dengan menyimpannya ke atribut atribut struktur kelas. Kita tahu bahwa untuk kelas, bidang, dan metode, ada struktur tabel spesifik mereka sendiri dalam struktur kelas, dan masing -masing memiliki atributnya sendiri. Untuk anotasi, ruang lingkup fungsinya juga bisa berbeda. Mereka dapat digunakan di kelas, atau di bidang atau metode. Pada saat ini, kompiler akan menyimpan informasi anotasi pada atribut kelas, bidang, dan metode yang sesuai.
Setelah kelas AnnotationTest kami dikompilasi, properti RuntimevisiBleannotations akan dimasukkan dalam file kelas annotationTest yang sesuai. Karena anotasi ini diterapkan ke kelas, properti ini ditambahkan ke set atribut kelas. Artinya, nilai pasangan nilai kunci = uji anotasi uji akan dicatat. Ketika JVM memuat bytecode file annotationTest.class, nilai properti RunTimevisiBleanNotations akan disimpan ke objek kelas AnnotationTest, sehingga objek anotasi uji dapat diperoleh melalui uji annotationtest.class.
Mungkin ada pertanyaan di sini, apa objek anotasi tes? Faktanya, esensi anotasi setelah dikompilasi adalah antarmuka yang mewarisi antarmuka anotasi, jadi @test sebenarnya adalah "tes antarmuka publik memperluas anotasi". Ketika kami menelepon melalui annotationtest.class.getannotation (test.class), JDK akan menghasilkan objek yang mengimplementasikan antarmuka uji melalui proxy dinamis, dan mengatur nilai properti RunTimevisiBleanNotations ke dalam objek ini. Objek ini adalah objek anotasi uji. Nilai anotasi dapat diperoleh melalui metode nilai ().
Seluruh proses mekanisme implementasi anotasi Java ditunjukkan di atas. Implementasinya membutuhkan kerja sama kompiler dan JVM.
Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!