Sejak diperkenalkannya anotasi dalam versi Java 5.0, itu telah menjadi bagian yang sangat penting dari platform Java. Selama proses pengembangan, kita sering melihat anotasi seperti @Override dan @Deprecated dalam kode aplikasi. Dalam artikel ini, saya akan memberi tahu Anda anotasi apa itu, mengapa mereka harus diperkenalkan, bagaimana anotasi bekerja, cara menulis anotasi khusus (melalui contoh), dan dalam keadaan apa Anda dapat menggunakan anotasi serta anotasi dan ADF terbaru (kerangka pengembangan aplikasi). Butuh sedikit waktu, jadi siapkan secangkir kopi dan biarkan kita memasuki dunia anotasi.
Apa itu anotasi?
Satu kata dapat menggambarkan anotasi, yaitu metadata, yaitu data yang menjelaskan data. Oleh karena itu, dapat dikatakan bahwa anotasi adalah metadata kode sumber. Misalnya, kode berikut:
@Overridepublic string toString () {return "Ini adalah representasi string objek saat ini.";}Dalam kode di atas, saya menulis ulang metode ToString () dan menggunakan anotasi @Override. Namun, bahkan jika saya tidak menggunakan anotasi @Override untuk menandai kode, program dapat dieksekusi secara normal. Jadi, apa arti anotasi? Apakah ada manfaat untuk menulis dengan cara ini? Bahkan, @Override memberi tahu kompiler bahwa metode ini adalah metode penulisan ulang (metadata yang menggambarkan metode ini). Jika metode ini tidak ada di kelas induk, kompiler akan melaporkan kesalahan, mendorong bahwa metode tersebut belum menulis ulang metode di kelas induk. Jika saya secara tidak sengaja mengeja kesalahan ketik yang salah, misalnya, tulis tostring () sebagai tostring () {double r}, dan saya tidak menggunakan anotasi @Override, program ini masih dapat dikompilasi dan dijalankan. Tetapi hasil operasi akan sangat berbeda dari yang saya harapkan. Sekarang kami memahami anotasi apa itu, dan menggunakan anotasi membantu membaca program.
Anotasi adalah pengubah khusus yang diterapkan pada kelas, metode, parameter, variabel, konstruktor dan deklarasi paket. Ini adalah alat yang dipilih oleh standar JSR-175 untuk menggambarkan metadata.
Mengapa memperkenalkan anotasi?
Sebelum (atau bahkan setelah digunakan), XML banyak digunakan untuk menggambarkan metadata. Beberapa pengembang aplikasi dan arsitek telah mulai menemukan bahwa pemeliharaan XML semakin buruk. Mereka ingin menggunakan sesuatu yang erat dengan kode, daripada deskripsi kode yang secara longgar digabungkan dengan kode (dan dalam beberapa kasus bahkan sepenuhnya terpisah) seperti XML. Jika Anda mencari "XML vs Annotations" di Google, Anda akan melihat banyak debat tentang masalah ini. Yang paling menarik adalah konfigurasi XML sebenarnya diperkenalkan ke kode dan konfigurasi yang terpisah. Dua tampilan di atas mungkin membingungkan Anda. Kedua pandangan tampaknya membentuk siklus, tetapi masing -masing memiliki pro dan kontra. Mari kita gunakan contoh untuk memahami perbedaan antara keduanya.
Jika Anda ingin mengatur banyak konstanta atau parameter untuk aplikasi Anda, XML adalah pilihan yang baik dalam kasus ini karena tidak akan terhubung ke kode tertentu. Jika Anda ingin mendeklarasikan metode sebagai layanan, akan lebih baik menggunakan anotasi karena dalam hal ini, anotasi dan metode perlu digabungkan dengan ketat, dan pengembang harus mengenali ini.
Faktor penting lainnya adalah bahwa anotasi mendefinisikan cara standar untuk menggambarkan metadata. Sebelum ini, pengembang biasanya mendefinisikan metadata dengan cara mereka sendiri. Misalnya, gunakan antarmuka yang ditandai, anotasi, kata kunci sementara, dan sebagainya. Setiap programmer mendefinisikan metadata dengan caranya sendiri, tidak seperti cara standar anotasi.
Saat ini, banyak kerangka kerja menggunakan XML dan anotasi dalam kombinasi untuk menyeimbangkan pro dan kontra antara keduanya.
Bagaimana cara kerja anotasi? Bagaimana cara menulis anotasi khusus?
Sebelum memberi tahu bagian ini, kami menyarankan Anda pertama kali mengunduh Annotations Contoh kode annotationssample.zip. Setelah mengunduh, masukkan ke dalam IDE yang biasa Anda gunakan. Kode -kode ini akan membantu Anda lebih memahami mekanisme anotasi.
Menulis anotasi sangat sederhana, Anda dapat membandingkan definisi anotasi dengan definisi antarmuka. Mari kita lihat dua contoh: satu adalah anotasi standar @Override, dan yang lainnya adalah anotasi @todo yang ditentukan pengguna.
@Target (elementType.method) @retention (retentionpolicy.source) public @interface override {}Anda mungkin memiliki beberapa pertanyaan tentang anotasi @Override, tidak melakukan apa -apa, jadi bagaimana cara memeriksa bahwa ada fungsi dengan nama yang sama di kelas induk? Tentu saja, jangan kaget, saya hanya menggodamu. Definisi anotasi @Override bukan hanya kode kecil itu. Bagian konten ini sangat penting, saya harus mengulanginya lagi: Anotasi hanyalah metadata dan tidak ada hubungannya dengan logika bisnis. Agak sulit untuk dipahami, tapi hanya itu. Jika anotasi tidak mengandung logika bisnis, seseorang harus mengimplementasikannya. Pengguna metadata melakukan ini. Anotasi hanya memberikan informasi tentang properti yang ditentukan (kelas/metode/paket/domain). Pengguna Anotasi (sekali lagi, beberapa kode) membaca informasi ini dan mengimplementasikan logika yang diperlukan.
Ketika kami menggunakan anotasi Java (seperti @Override), JVM adalah pengguna, yang berfungsi pada level bytecode. Pada titik ini, pengembang aplikasi tidak dapat mengontrol atau menggunakan anotasi khusus. Jadi, mari kita jelaskan cara menulis anotasi khusus.
Mari kita bicara tentang poin -poin penting dalam menulis anotasi khusus satu per satu. Dalam contoh di atas, Anda melihat beberapa anotasi yang diterapkan pada anotasi.
Versi J2SE5.0 menyediakan empat jenis anotasi meta di java.lang.Annotation, yang secara khusus membuat anotasi anotasi lain:
@Documented anotasi tag anotasi sederhana yang menunjukkan apakah informasi anotasi ditambahkan ke dokumen Java.
@Retention mendefinisikan siklus hidup anotasi ini.
RetensiPolicy. Sumber dibuang selama fase kompilasi. Anotasi ini tidak lagi memiliki makna setelah kompilasi, sehingga mereka tidak menulis bytecode. @Override, @suppresswarnings semuanya termasuk jenis anotasi ini.
RetentionPolicy.Class dibuang saat kelas dimuat. Berguna dalam memproses file bytecode. Ini adalah metode default untuk anotasi.
RetensiPolicy. Anotasi khusus kami biasanya digunakan dengan cara ini.
@Target menunjukkan di mana anotasi ini digunakan. Jika tidak ditentukan, anotasi dapat ditempatkan di mana saja. Berikut adalah beberapa parameter yang tersedia. Perlu dicatat bahwa anotasi atribut kompatibel. Jika Anda ingin menambahkan anotasi ke semua 7 atribut dan hanya mengecualikan satu atribut, maka Anda perlu menentukan target untuk memasukkan semua atribut.
@InHerited mendefinisikan hubungan antara anotasi ini dan subkelas ini
Jadi, bagaimana definisi anotasi internal? Anotasi hanya mendukung tipe dasar, string, dan jenis enum. Semua atribut dalam komentar didefinisikan sebagai metode dan memungkinkan nilai default disediakan.
@Target (elementType.method) @retention (retentionpolicy.runtime) @interface todo {prioritas enum publik {rendah, sedang, tinggi} status enum publik {dimulai, not_started} status string () default "yash"; prioritas prioritas () prioritas default. Contoh berikut menunjukkan cara menggunakan anotasi di atas.
@Todo (prioritas = TODO.PRIORITY.MEDIUM, penulis = "yashwant", status = todo.status.started) public void incompleteTeMethod1 () {// Beberapa logika bisnis ditulis // Tapi itu belum lengkap} Jika hanya ada satu atribut dalam anotasi, itu dapat dinamai secara langsung "nilai", dan tidak perlu menunjukkan nama atribut saat menggunakannya.
@Interface Author {string value ();}@author ("yashwant") public void someMethod () {} Tapi sejauh ini semuanya terlihat cukup bagus. Kami mendefinisikan anotasi kami sendiri dan menerapkannya pada metode logika bisnis. Sekarang kita perlu menulis program pengguna untuk memanggil anotasi kita. Di sini kita perlu menggunakan mekanisme refleksi. Jika Anda terbiasa dengan kode refleksi, Anda akan tahu bahwa refleksi dapat memberikan nama kelas, metode, dan objek variabel instan. Semua objek ini memiliki metode getAnnotation () untuk mengembalikan informasi anotasi. Kita perlu mengonversi objek ini menjadi komentar khusus kita (setelah memeriksa dengan instanceof ()), dan kita juga dapat memanggil metode dalam komentar khusus. Lihatlah kode contoh berikut, menggunakan anotasi di atas:
Class BusinessLogicclass = BusinessLogic.class; for (Metode Metode: BusinessLogicclass.getMethods ()) {TODO TOPONONOTATION = (TODO) METODE.GetAnnotation (TODO.Class); if (TODOAnOnotation! = NULL) {System.out.println ("Metode nama:" + Metode (" + Metode (") {System.out.println ("Metode:" Metode (" + Metode. TOPOAnnotation.Author ()); System.out.println ("Prioritas:" + TOPOANNOTATION.Priority ()); System.out.println ("Status:" + TOPOAnnotation.Status ());}}Kasus penggunaan anotasi
Fungsi anotasi sangat kuat, dan kerangka kerja seperti Spring dan Hebernate menggunakan anotasi dalam penebangan dan validitas. Anotasi dapat diterapkan di mana antarmuka penanda digunakan. Perbedaannya adalah bahwa antarmuka tag digunakan untuk mendefinisikan kelas lengkap, tetapi Anda dapat mendefinisikan komentar untuk metode tunggal, seperti apakah akan mengekspos metode sebagai layanan.
Banyak anotasi baru telah diperkenalkan di Servlet 3.0 terbaru, terutama yang terkait dengan keamanan servlet.
Handlestypes Anotasi ini digunakan untuk mewakili satu set kelas aplikasi yang diteruskan ke servletContainerInitializer.
Httpconstraint anotasi ini mewakili kendala keamanan untuk permintaan aplikasi dari semua metode HTTP, dan berbeda dari httpmethodconstraint keterbatasan keamanan yang ditentukan dalam anotasi keamanan servlets.
HTTPMethodConstraint menentukan batasan keamanan untuk berbagai jenis permintaan, yang berbeda dari anotasi yang menjelaskan tipe metode protokol HTTP dalam anotasi keamanan servlets.
MultipartConfig Anotasi ini ditandai pada servlet, menunjukkan bahwa jenis MIME dari permintaan yang ingin diproses oleh servlet adalah multipart/form-data.
SERVETSECURITY Anotasi ditandai pada kelas warisan Servlet, dan permintaan protokol HTTP dipaksa untuk mematuhi kendala keamanan.
WebFilter digunakan untuk mendeklarasikan filter server;
WebInitParam Anotasi ini digunakan untuk mendeklarasikan parameter inisialisasi dalam servlet atau filter, dan biasanya digunakan dengan @WebServlet atau @WebFilter.
Weblistenen Anotasi ini adalah jenis pendengar deklarasi acara yang berbeda dalam konteks aplikasi web.
WebServer Anotasi ini digunakan untuk mendeklarasikan konfigurasi servlet.
ADF (Framework Aplikasi) dan Anotasi
Sekarang kita mulai membahas bagian terakhir artikel. Kerangka kerja aplikasi, yang dikenal sebagai ADF, dikembangkan oleh Oracle untuk membuat aplikasi Oracle Converged. Kami telah memahami kelebihan dan kekurangan anotasi dan tahu cara menulis anotasi khusus, tetapi di mana kami harus menerapkan anotasi? Apakah ADF memberikan beberapa anotasi biasa? Pertanyaan yang bagus, memang ada beberapa keterbatasan dalam menggunakan anotasi dalam ADF. Kerangka kerja aplikasi yang disebutkan sebelumnya seperti Spring dan Hibernate menggunakan AOP (pemrograman berorientasi samping). Dalam AOP, kerangka kerja menyediakan mekanisme untuk menyuntikkan kode ke dalam pemrosesan pra-pemrosesan dan pemrosesan peristiwa selanjutnya. Misalnya: Anda memiliki kait untuk menambahkan kode sebelum dan sesudah eksekusi metode, sehingga Anda dapat menulis kode pengguna Anda di tempat -tempat ini. ADF tidak menggunakan AOP. Jika kami memiliki kasus penggunaan untuk anotasi yang tersedia, kami mungkin perlu mengimplementasikannya melalui warisan.
Saya harap Anda menyukai artikel ini untuk membantu Anda lebih memahami arti anotasi!