Rumah  >  Artikel  >  Java  >  Bagaimana untuk Meniru Warisan Anotasi untuk Antara Muka dan Kaedah Overriding dalam Java Menggunakan AspectJ?

Bagaimana untuk Meniru Warisan Anotasi untuk Antara Muka dan Kaedah Overriding dalam Java Menggunakan AspectJ?

Linda Hamilton
Linda Hamiltonasal
2024-10-24 03:09:02534semak imbas

How to Emulate Annotation Inheritance for Interfaces and Overriding Methods in Java Using AspectJ?

Meniru Warisan Anotasi dalam Java dengan AspectJ

Di Java, anotasi pada antara muka, kaedah atau anotasi tidak diwarisi secara automatik oleh kelas pelaksananya , kaedah mengatasi atau anotasi beranotasi. Walaupun anotasi @Inherited Java membenarkan warisan anotasi untuk kelas dan subkelas, ia tidak meluas kepada senario yang dinyatakan di atas.

AspectJ boleh meniru warisan anotasi dengan mentakrifkan pengisytiharan antara jenis (ITD). ITD menyediakan cara untuk menambah dan mengubah suai anotasi secara atur cara pada jenis, kaedah dan medan pada masa penyusunan.

Dalam contoh ini, anotasi @Marker digunakan untuk menganotasi antara muka MyInterface dan kaedahnya dua(). Walau bagaimanapun, aspek AspectJ yang sepatutnya memintas pelaksanaan kelas dan kaedah yang dijelaskan dengan @Marker tidak mencetuskan.

Penyelesaian:

Untuk meniru warisan anotasi untuk antara muka dan kaedah, anda boleh menggunakan penyelesaian berikut dengan AspectJ:

<code class="java">public aspect MarkerAnnotationInheritor {
  // Implementing classes should inherit marker annotation
  declare @type: MyInterface+ : @Marker;
  // Overriding methods 'two' should inherit marker annotation
  declare @method : void MyInterface+.two() : @Marker;
}</code>

Aspek ini pada asasnya menambahkan anotasi @Marker kepada semua kelas pelaksana dan kaedah mengatasi MyInterface, meniru warisan anotasi dengan berkesan.

Penyelesaian Alternatif:

Anda juga boleh membenamkan aspek terus ke dalam antara muka, mewujudkan pelaksanaan warisan anotasi serba lengkap:

<code class="java">public interface MyInterface {
  // ...

  // Embedded AspectJ aspect
  public static aspect MarkerAnnotationInheritor {
    // ...
  }
}</code>

Nota: Apabila menggunakan AspectJ untuk meniru warisan anotasi, aspek ITD mesti diletakkan sebelum pengisytiharan jenis atau kaedah yang dirujuknya dalam kod sumber. Ini memastikan bahawa pengkompil AspectJ menggunakan ITD sebelum fasa kompilasi Java biasa.

Atas ialah kandungan terperinci Bagaimana untuk Meniru Warisan Anotasi untuk Antara Muka dan Kaedah Overriding dalam Java Menggunakan AspectJ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn