>  기사  >  Java  >  AspectJ는 인터페이스와 해당 메소드에 대한 주석 상속을 달성할 수 있습니까?

AspectJ는 인터페이스와 해당 메소드에 대한 주석 상속을 달성할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-24 00:35:30310검색

Can AspectJ Achieve Annotation Inheritance for Interfaces and Their Methods?

AspectJ는 인터페이스 및 해당 메소드에 대한 주석 상속을 에뮬레이트할 수 있습니까?

Java 주석 상속은 인터페이스, 메소드 또는 메소드에 정의된 주석으로 제한됩니다. 주석은 클래스 구현, 메서드 재정의 또는 주석이 달린 주석을 활용하는 클래스로 상속되지 않습니다. 이 제한 사항은 JVM 제약 조건 내에서 작동하는 AspectJ에 적용됩니다.

해결책: 특정 사례에서 주석 상속 에뮬레이션

주석 상속에 대한 일반적인 솔루션을 사용할 수 없지만 해결 방법 특정 인터페이스 또는 메소드에 대해 존재합니다.

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

구현:

  • ITD(유형 간 정의)는 수동으로 인터페이스에 주석을 추가하고/를 구현합니다. 클래스/메서드 재정의.
  • 인터페이스 또는 메서드의 실제 주석을 제거할 수 있습니다.

결과:

현재 콘솔 로그 인쇄:

execution(de.scrum_master.app.Application())
execution(void de.scrum_master.app.Application.two())

대체 솔루션:

Aspect는 인터페이스 내에 내장되어 구현을 한 위치에 통합할 수 있습니다. 컴파일러 인식을 위해 파일 이름을 .aj로 바꿉니다.

<code class="java">// MyInterface.aj

public interface MyInterface {
  void one();
  void two();
  
  public static aspect MarkerAnnotationInheritor {
    declare @type: MyInterface+ : @Marker;
    declare @method : void MyInterface+.two() : @Marker;
  }
}</code>

위 내용은 AspectJ는 인터페이스와 해당 메소드에 대한 주석 상속을 달성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.