Apa area utama yang dapat kita gunakan Anotasi? Apakah fitur pengganti untuk konfigurasi berbasis XML?
java
annotations
CD Biju
sumber
sumber
Jawaban:
Anotasi adalah objek meta-meta yang dapat digunakan untuk menggambarkan objek meta lainnya . Meta-objek adalah kelas, bidang, dan metode. Meminta objek untuk objek meta (mis
anObj.getClass()
) disebut introspeksi . Introspeksi dapat melangkah lebih jauh dan kita dapat menanyakan objek-meta apa penjelasannya (misalnyaaClass.getAnnotations
). Introspeksi dan anotasi adalah milik apa yang disebut refleksi dan meta-pemrograman .Anotasi perlu ditafsirkan dengan satu atau lain cara agar bermanfaat. Anotasi dapat diartikan pada saat pengembangan oleh IDE atau kompiler, atau saat dijalankan oleh suatu kerangka kerja.
Pemrosesan anotasi adalah mekanisme yang sangat kuat dan dapat digunakan dalam banyak cara berbeda:
@Deprecated, @Override
, atau@NotNull
@Entity, @TestCase, @WebService
@Statefull, @Transaction
@Column, @XmlElement
Dalam semua kasus, anotasi digunakan untuk menggambarkan elemen dan memperjelas artinya .
Sebelum JDK5, informasi yang sekarang diungkapkan dengan anotasi perlu disimpan di tempat lain, dan file XML sering digunakan. Tetapi lebih nyaman menggunakan anotasi karena mereka akan menjadi milik kode Java itu sendiri, dan karenanya lebih mudah untuk dimanipulasi daripada XML.
Penggunaan anotasi:
... lihat misalnya di proyek Lombok , yang menggunakan anotasi untuk menentukan cara membuat
equals
atauhashCode
metode.sumber
Ada beberapa aplikasi untuk anotasi Java. Pertama-tama, mereka dapat digunakan oleh kompiler (atau ekstensi kompiler). Pertimbangkan misalnya anotasi Timpa :
Yang ini sebenarnya dibangun di Java JDK. Compiler akan menandakan kesalahan, jika beberapa metode ditandai dengan itu, yang tidak menimpa metode yang diwarisi dari kelas dasar. Anotasi ini mungkin berguna untuk menghindari kesalahan umum, di mana Anda sebenarnya bermaksud untuk menimpa metode, tetapi gagal melakukannya, karena tanda tangan yang diberikan dalam metode Anda tidak cocok dengan tanda tangan dari metode yang ditimpa:
Pada JDK7, anotasi diizinkan pada jenis apa pun. Fitur ini sekarang dapat digunakan untuk anotasi kompiler seperti NotNull , seperti di:
yang memungkinkan kompiler untuk memperingatkan Anda tentang penggunaan variabel dan nilai null yang tidak benar .
Aplikasi lain yang lebih maju untuk anotasi melibatkan proses refleksi dan anotasi saat run-time. Ini (saya pikir) apa yang ada dalam pikiran Anda ketika Anda berbicara tentang anotasi sebagai "pengganti untuk konfigurasi berbasis XML". Ini adalah jenis pemrosesan anotasi yang digunakan, misalnya, oleh berbagai kerangka kerja dan standar JCP (ketekunan, injeksi ketergantungan, sebut saja) untuk memberikan meta-data dan informasi konfigurasi yang diperlukan.
sumber
Anotasi adalah bentuk metadata (data tentang data) yang ditambahkan ke file sumber Java. Mereka sebagian besar digunakan oleh kerangka kerja untuk menyederhanakan integrasi kode klien. Beberapa contoh dunia nyata dari atas kepala saya:
JUnit 4 - Anda menambahkan
@Test
anotasi ke setiap metode pengujian yang Anda inginkan untuk dijalankan oleh pelari JUnit. Ada juga anotasi tambahan yang harus dilakukan dengan mengatur pengujian (seperti@Before
dan@BeforeClass
). Semua ini diproses oleh pelari JUnit, yang menjalankan tes sesuai. Anda bisa mengatakan itu adalah pengganti untuk konfigurasi XML, tetapi anotasi terkadang lebih kuat (mereka dapat menggunakan refleksi, misalnya) dan juga mereka lebih dekat dengan kode yang mereka rujuk (@Test
anotasi tepat sebelum metode pengujian, jadi tujuannya dari metode itu jelas - berfungsi sebagai dokumentasi juga). Konfigurasi XML di sisi lain bisa lebih kompleks dan dapat memasukkan lebih banyak data daripada penjelasan.Terracotta - menggunakan anotasi dan file konfigurasi XML. Sebagai contoh,
@Root
anotasi memberitahukan runtime Terracotta bahwa bidang yang dianotasi adalah root dan memorinya harus dibagi antara instance VM. File konfigurasi XML digunakan untuk mengkonfigurasi server dan memberi tahu kelas mana yang akan diinstrumentasi.Google Guice - contohnya adalah
@Inject
anotasi, yang bila diterapkan pada konstruktor membuat Guice runtime mencari nilai untuk setiap parameter, berdasarkan pada injector yang ditentukan. The@Inject
anotasi akan cukup sulit untuk meniru menggunakan file konfigurasi XML, dan kedekatannya dengan konstruktor itu referensi untuk cukup berguna (bayangkan harus mencari ke file XML besar untuk menemukan semua suntikan ketergantungan Anda telah mengatur).Semoga saya telah memberi Anda rasa bagaimana anotasi digunakan dalam kerangka kerja yang berbeda.
sumber
Anotasi di Jawa, menyediakan sarana untuk menggambarkan kelas, bidang, dan metode. Pada dasarnya, mereka adalah bentuk metadata yang ditambahkan ke file sumber Java, mereka tidak dapat mempengaruhi semantik program secara langsung. Namun, anotasi dapat dibaca pada saat run-time menggunakan Refleksi & proses ini dikenal sebagai Introspeksi. Kemudian dapat digunakan untuk memodifikasi kelas, bidang, atau metode.
Fitur ini, sering dieksploitasi oleh Libraries & SDKs (hibernate, JUnit, Spring Framework) untuk menyederhanakan atau mengurangi jumlah kode yang akan dilakukan oleh seorang programmer kecuali jika bekerja untuk Perpustakaan atau SDK ini. Oleh karena itu, wajar untuk mengatakan Anotasi dan Refleksi bekerja bergandengan tangan di Jawa.
Kami juga dapat membatasi ketersediaan anotasi untuk waktu kompilasi atau runtime. Berikut adalah contoh sederhana tentang membuat anotasi khusus
Driver.java
TestAlpha.java
IssueInfo.java
sumber
Tidak sepenuhnya, tetapi konfigurasi yang berhubungan erat dengan struktur kode (seperti pemetaan JPA atau injeksi dependensi di Spring) sering kali dapat diganti dengan anotasi, dan kemudian biasanya jauh lebih sedikit bertele-tele, menjengkelkan dan menyakitkan. Hampir semua kerangka kerja terkenal telah membuat peralihan ini, meskipun konfigurasi XML lama biasanya tetap sebagai opsi.
sumber
Ada 2 tampilan anotasi
tampilan pengguna, sebagian besar waktu, anotasi bekerja seperti jalan pintas, menyelamatkan Anda beberapa goresan kunci, atau membuat program Anda lebih mudah dibaca
tampilan vendor, pandangan prosesor tentang anotasi lebih merupakan 'antarmuka' berbobot ringan, program Anda TIDAK menghadapi SESUATU tetapi tanpa secara eksplisit "mengimplementasikan" antarmuka tertentu (di sini alias anotasi)
misalnya di jpa Anda mendefinisikan sesuatu seperti
dari pada
keduanya berbicara hal yang sama "Foo adalah kelas Entity"
sumber
Di mana Anotasi Dapat Digunakan
Pembaruan Java SE 8: anotasi juga dapat diterapkan untuk penggunaan tipe. Berikut ini beberapa contohnya:
Ekspresi pembuatan instance kelas:
baru @Interned MyObject ();
Jenis cor:
myString = (@NonNull String) str;
mengimplementasikan klausa:
class UnmodifiableList mengimplementasikan @Readonly List <@Readonly T> {...}
Deklarasi pengecualian yang dilemparkan:
membatalkan monitorTemperature () melempar @Critical TemperatureException {...}
sumber
Kerangka kerja seperti Hibernate sedang banyak konfigurasi / pemetaan diperlukan menggunakan Anotasi berat.
Lihatlah Anotasi Hibernasi
sumber
JPA (dari Java EE 5) adalah contoh luar biasa dari penggunaan anotasi (berlebih). Java EE 6 juga akan memperkenalkan anotasi di banyak area baru, seperti layanan web RESTful dan anotasi baru untuk masing-masing API Servlet lama yang baik.
Berikut ini beberapa sumber:
Bukan hanya konfigurasi spesifik yang akan / dapat diambil alih oleh anotasi, tetapi mereka juga dapat digunakan untuk mengontrol perilaku. Anda melihat ini bagus di contoh JAX-RS Java EE 6.
sumber
Ini berguna untuk membubuhi keterangan kelas Anda, baik di metode, kelas, atau tingkat bidang, sesuatu tentang kelas yang tidak cukup terkait dengan kelas.
Anda dapat memiliki anotasi Anda sendiri, yang digunakan untuk menandai kelas-kelas tertentu sebagai uji-pakai saja. Itu bisa saja untuk keperluan dokumentasi, atau Anda bisa menegakkannya dengan memfilternya selama kompilasi kandidat rilis produksi Anda.
Anda bisa menggunakan anotasi untuk menyimpan beberapa data meta, seperti dalam kerangka kerja plugin, misalnya, nama plugin.
Ini hanyalah alat lain, memiliki banyak tujuan.
sumber
Ini melampirkan informasi tambahan tentang kode dengan (a) pemeriksaan kompiler atau (b) analisis kode
**
**
Tipe 1) Anotasi yang diterapkan pada kode java:
Tipe 2) Anotasi yang diterapkan pada anotasi lain:
**
** http://en.wikipedia.org/wiki/Java_annotation#Custom_annotations
UNTUK MEMAHAMI TRY DI BAWAH Tautan yang LEBIH BAIK: BERLIHAT DENGAN CONTOH
http://www.javabeat.net/2007/08/annotations-in-java-5-0/
sumber
Anotasi dapat digunakan sebagai alternatif untuk file konfigurasi eksternal, tetapi tidak dapat dianggap sebagai pengganti yang lengkap. Anda dapat menemukan banyak contoh di mana annotationi telah digunakan untuk mengganti file konfigurasi, seperti Hibernate, JPA, EJB 3 dan hampir semua teknologi yang termasuk dalam Java EE.
Lagi pula ini tidak selalu pilihan yang baik. Tujuan menggunakan file konfigurasi biasanya untuk memisahkan kode dari detail lingkungan tempat aplikasi berjalan. Dalam situasi seperti itu, dan sebagian besar ketika konfigurasi digunakan untuk memetakan aplikasi ke struktur sistem eksternal, anotasi bukan pengganti yang baik untuk file konfigurasi, karena mereka membawa Anda untuk memasukkan rincian sistem eksternal di dalam kode sumber aplikasi Anda. Di sini file eksternal dianggap sebagai pilihan terbaik, jika tidak, Anda harus memodifikasi kode sumber dan mengkompilasi ulang setiap kali Anda mengubah detail yang relevan di lingkungan eksekusi.
Anotasi jauh lebih cocok untuk menghias kode sumber dengan informasi tambahan yang menginstruksikan alat pemrosesan, baik pada waktu kompilasi dan pada saat runtime, untuk menangani kelas dan struktur kelas dengan cara khusus.
@Override
dan JUnit@Test
adalah contoh yang baik dari penggunaan seperti itu, sudah dijelaskan secara rinci dalam jawaban lain.Pada akhirnya aturannya selalu sama: tetap di dalam sumber hal-hal yang berubah dengan sumber, dan tetap di luar sumber hal-hal yang berubah secara independen dari sumber.
sumber
Java EE 5 lebih menyukai penggunaan anotasi daripada konfigurasi XML. Misalnya, dalam EJB3 atribut transaksi pada metode EJB ditentukan menggunakan anotasi. Mereka bahkan menggunakan anotasi untuk menandai POJO sebagai EJBs dan untuk menentukan metode tertentu sebagai metode siklus hidup alih-alih mengharuskan implementasi antarmuka.
sumber
Tujuan dari anotasi Java hanya untuk mengaitkan informasi dengan elemen program beranotasi. Anotasi Java dapat digunakan sebagai pengubah dalam deklarasi apa pun, baik paket, kelas (termasuk enum), antarmuka (termasuk jenis anotasi), bidang, metode, parameter formal, konstruktor, atau variabel lokal.
Anotasi Java juga dapat digunakan pada konstanta enum. Anotasi semacam itu ditempatkan tepat sebelum enum konstan yang dianotasi. Anotasi Java secara konvensional ditempatkan di depan semua pengubah lainnya, tetapi ini bukan persyaratan; mereka dapat secara bebas dicampur dengan pengubah lain.
Baca secara terperinci tentang Java Annotations .
sumber
Berikut ini adalah beberapa tempat di mana Anda dapat menggunakan anotasi.
Anda dapat merujuk tautan ini untuk detail lebih lanjut tentang anotasi.
Anda dapat merujuk tautan ini untuk melihat bagaimana anotasi digunakan untuk membangun rangkaian uji sederhana.
sumber