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>
구현:
결과:
현재 콘솔 로그 인쇄:
execution(de.scrum_master.app.Application()) execution(void de.scrum_master.app.Application.two())
대체 솔루션:
Aspect는 인터페이스 내에 내장되어 구현을 한 위치에 통합할 수 있습니다. 컴파일러 인식을 위해 파일 이름을
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!