AspectJ를 사용하여 Java에서 주석 상속 에뮬레이션
Java에서 인터페이스, 메소드 또는 주석의 주석은 구현 클래스에 의해 자동으로 상속되지 않습니다. , 재정의 메서드 또는 주석이 달린 주석. Java의 @Inherited 주석은 클래스 및 하위 클래스에 대한 주석 상속을 허용하지만 앞서 언급한 시나리오로 확장되지는 않습니다.
AspectJ는 ITD(Inter-Type Declaration)를 정의하여 주석 상속을 에뮬레이트할 수 있습니다. ITD는 컴파일 타임에 유형, 메서드 및 필드에 대한 주석을 프로그래밍 방식으로 추가하고 수정하는 방법을 제공합니다.
이 예에서 @Marker 주석은 MyInterface 인터페이스와 해당 메서드 two()에 주석을 추가하는 데 사용됩니다. 그러나 @Marker로 주석이 달린 클래스 및 메서드의 실행을 가로채도록 되어 있는 AspectJ 측면은 트리거되지 않습니다.
해결책:
인터페이스에 대한 주석 상속을 에뮬레이트하려면 메서드를 사용하는 경우 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>
이 측면은 기본적으로 모든 구현 클래스와 MyInterface의 재정의 메서드에 @Marker 주석을 추가하여 주석 상속을 효과적으로 에뮬레이트합니다.
대체 솔루션:
또한 인터페이스에 직접 측면을 삽입하여 자체 포함된 주석 상속 구현을 생성할 수도 있습니다.
<code class="java">public interface MyInterface { // ... // Embedded AspectJ aspect public static aspect MarkerAnnotationInheritor { // ... } }</code>
참고: AspectJ를 사용하여 주석 상속을 에뮬레이트할 때 ITD 측면은 소스 코드에서 참조하는 유형 또는 메소드 선언 앞에 배치되어야 합니다. 이렇게 하면 AspectJ 컴파일러가 일반 Java 컴파일 단계 전에 ITD를 적용합니다.
위 내용은 AspectJ를 사용하여 Java에서 인터페이스 및 재정의 메서드에 대한 주석 상속을 에뮬레이트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!