Anotasi Java memberikan beberapa informasi tentang kode, tetapi tidak secara langsung mempengaruhi konten kode yang dianotasi. Dalam tutorial ini, kita akan belajar tentang anotasi Java, cara menyesuaikan anotasi, penggunaan anotasi, dan cara menguraikan anotasi melalui refleksi.
Java 1.5 memperkenalkan anotasi, dan banyak kerangka kerja Java saat ini menggunakan anotasi secara luas, seperti Hibernate, Jersey, dan Spring. Anotasi tertanam dalam program ini sebagai metadata program. Anotasi dapat diuraikan oleh beberapa alat penguraian atau alat penyusunan. Kami juga dapat menyatakan bahwa anotasi memiliki efek selama kompilasi atau eksekusi.
Sebelum menggunakan anotasi, data sumber program hanya melalui anotasi Java dan Javadoc, tetapi anotasi memberikan lebih dari ini. Anotasi tidak hanya mengandung metadata, tetapi juga dapat bertindak berdasarkan urutan eksekusi program. Interpreter anotasi dapat memecahkan perintah eksekusi program melalui anotasi. Misalnya, di Jersey WebService kami menambahkan ** path ** anotasi dalam bentuk string URI ke metode, kemudian selama program berjalan, Jerser Interpreter akan menentukan bahwa metode tersebut akan memanggil URI yang diberikan.
Buat Anotasi Kustom Java
Membuat anotasi khusus mirip dengan membuat antarmuka, tetapi kata kunci antarmuka beranotasi harus dimulai dengan simbol @. Kami dapat mendeklarasikan metode anotasi. Pertama -tama mari kita lihat contoh anotasi, dan kemudian kita akan membahas beberapa karakteristiknya.
paket com.journaldev.annotations; Impor java.lang.annotation.dokumen; impor java.lang.annotation.elementType; impor java.lang.annotation.Herited; impor java.lang.annotation.Retensi; impor java.lang.annotation.RetentionPolicy; impor java.lang.annotation.targaration; @Didokumentasikan@target (elementType.method)@warisan@retensi (retentionpolicy.runtime) public @interface MethodInfo {string worhor () default 'pankaj'; Date string (); int revision () default 1; String comments ();} Metode anotasi tidak dapat membawa parameter;
Jenis nilai pengembalian dari metode anotasi terbatas pada: tipe dasar, string, enum, anotasi atau array dari jenis ini;
Metode anotasi dapat memiliki nilai default;
Anotasi itu sendiri dapat berisi anotasi meta, yang digunakan untuk memberi anotasi anotasi lainnya.
Berikut adalah empat jenis anotasi meta :
1. @Documented - menunjukkan bahwa elemen yang memiliki anotasi ini dapat didokumentasikan oleh alat -alat seperti Javadoc. Jenis ini harus digunakan untuk memberi anotasi tipe -tipe yang memengaruhi deklarasi pelanggan menggunakan elemen beranotasi. Jika sebuah deklarasi dianotasi menggunakan terdokumentasi, jenis anotasi beranotasi ini digunakan sebagai API publik untuk anggota program beranotasi.
2. @target - Menunjukkan ruang lingkup elemen program yang dijelaskan oleh anotasi jenis ini. Nilai anotasi meta ini dapat berupa jenis, metode, konstruktor, bidang, dll. Jika anotasi meta target tidak muncul, anotasi yang ditentukan dapat diterapkan pada elemen program apa pun.
3. @Inherited - menunjukkan bahwa jenis anotasi diwariskan secara otomatis. Jika pengguna meminta jenis anotasi meta ini di kelas saat ini dan deklarasi kelas saat ini tidak mengandung jenis anotasi meta ini, ia juga akan secara otomatis menanyakan apakah kelas induk dari kelas saat ini memiliki anotasi meta yang diwariskan. Tindakan ini akan diulangi untuk mengetahui bahwa jenis anotasi telah ditemukan, atau kelas induk di tingkat atas ditanyakan.
4.@Retensi - Menentukan lamanya waktu anotasi dipertahankan. Nilai retensipolicy adalah sumber, kelas, runtime.
Anotasi bawaan Java
Java menyediakan tiga anotasi bawaan.
1. @Override - Ketika kita ingin menulis ulang metode di kelas induk, kita perlu menggunakan anotasi ini untuk menginformasikan kompiler bahwa kita ingin menulis ulang metode ini. Dengan cara ini kompiler akan meminta pesan kesalahan ketika metode di kelas induk dihapus atau terjadi perubahan.
2. @Deprecated - Ketika kami ingin kompiler mengetahui bahwa metode tidak disarankan, kami harus menggunakan anotasi ini. Java merekomendasikan anotasi ini di Javadoc, kami harus memberikan mengapa metode ini tidak direkomendasikan dan metode alternatif.
3. @suppresswarnings - Ini hanya untuk memberi tahu kompiler untuk mengabaikan pesan peringatan khusus, seperti menggunakan tipe data asli dalam generik. Kebijakan retensi adalah sumber (catatan penerjemah: valid dalam file sumber) dan dibuang oleh kompiler.
Mari kita lihat contoh anotasi bawaan di Java, lihat anotasi khusus yang disebutkan di atas.
paket com.journaldev.annotations; impor java.io.filenotfoundException; impor java.util.arraylist; import java.util.list; Public Class AnnotationExample {public static void main (string [] args) {} @override @methodInfo (penulis = 'pankaj', komentar = 'metode utama', date = 'nov 17 2012', revisi = 1) public string toString () {return 'overrown toString Metode';} @metode @yang didesahkan @yang dideskripsikan @yang disusun @comeaticed @{overriden overden toString '; void oldmethod () {System.out.println ('Metode lama, jangan gunakan itu.');} @suppresswarnings ({'Uncecked', 'Deprecation'}) @MethodInfo (penulis = 'Pankaj', komentar = 'Metode utama', tanggal = 'Nov 17', revisi = 10) Static Static Static = Public Stasic = Metode Mainer ', Tanggal =' November 2012 ', Revisi = 10) Static Static Static public = Public Venic', Tanggal = 'November 2012', Revisi = 10) Static Static Static Public Stations ArrayList baru (); l.add ('ABC'); oldmethod ();}}Saya percaya contoh ini bisa jelas dan dapat ditampilkan dalam skenario yang berbeda.
Analisis Anotasi Java
Kami akan menggunakan teknologi refleksi untuk menguraikan anotasi kelas Java. Maka retensi anotasi harus diatur ke runtime jika tidak informasi anotasi kelas Java tidak akan tersedia selama pelaksanaan, jadi kami tidak dapat mendapatkan data yang terkait dengan anotasi darinya.
paket com.journaldev.annotations; impor java.lang.annotation.annotation; impor java.lang.reflect.method; Public Class AnnotationParsing {public static void main (string [] args) {try {for (metode metode: annotationparsing.class .getClassLoader () .LoadClass (('com.journaldev.annotations.Annotationexample') .getMethods ()) {// checkS if Methodinfo) (method.isannotationPresent (com.journaldev.annotations.methodinfo.class)) {coba {// iterasi semua anotasi yang tersedia dalam metode untuk (annotation anno: method.getDeclaredAnnotations ()) {System.out.println ('Annotation in Method' ' + } MethodInfo methodanno = Method.getAnnotation (MethodInfo.class); if (methodanno.revision () == 1) {System.out.println ('Metode dengan revisi no 1 ='+ metode); }} catch (throwable ex) {ex.printstacktrace (); }}}} catch (SecurityException | ClassNotFoundException e) {E.PrintStackTrace (); }}} Menjalankan program di atas akan menghasilkan:
Anotasi dalam metode 'publik java.lang.string com.journaldev.annotations.annotationexample.toString ()': @com.journaldev.annotations.methodinfo (penulis = pankaj, revisi = 1, komentar = Metode utama, tanggal = Nov 17 2012) Metode No Revisi 1 = Public Java. comournaldev.annotations.Annotationexample.tostring () Anotasi dalam metode 'public static void com.journaldev.annotations.annotationexample.oldMethod ()': @java.lang.annotation () anotasi dalam metode 'public static void com.journaldev.annotation.annotation. @com.journaldev.annotations.methodinfo (penulis = pankaj, revisi = 1, komentar = metode yang sudah usang, tanggal = 17 Nov 2012) dengan revisi no 1 = public static void com.journaldev.Annotations.Annotationexample.oldMethod () Annotation dalam metode Static static static com.jev. journ com.joV.jev. java.io.filenotfoundException ': @com.journaldev.annotations.methodinfo (penulis = pankaj, revisi = 10, komentar = metode utama, tanggal = 17 Nov 2012)
Itu semua tentang tutorial ini, dan mudah -mudahan Anda dapat mempelajari sesuatu darinya.