Nicholas が指摘したように、これは AspectJ では不可能です。これが不可能な理由の詳細な証拠は次のとおりです ( http://www.eclipse.org/aspectj/doc/released/adk15notebook/annotations-pointcuts-and-advice.htmlセクション注釈継承とポイントカット マッチングから取得):
Java 5 仕様によると、型以外の注釈は継承されず、型の注釈は @Inherited メタ注釈がある場合にのみ継承されます。c2.aMethod (この例では b.method() になります) の呼び出しは一致しません。これは、修飾子 (可視性修飾子、注釈、および throws 句) のジョイン ポイント マッチングがジョイン ポイントのサブジェクト (メソッドが実際に呼び出されます)。
この同じ問題に苦しんでいたので、そのようなメソッドのポイントカットを作成できるようにする小さなメソッド/ライブラリを作成しました。これがあなたの例でどのように機能するかです:
myAnnotationIsExecuted(): execution(public * *.*(..)) &&
if(implementsAnnotation("@MyAnnotation()", thisJoinPoint));
また
myAnnotationIsExecuted(): execution(public * A+.*(..)) &&
if(implementsAnnotation("@MyAnnotation()", thisJoinPoint));
メソッドimplementsAnnotation(String,JoinPoint)
はライブラリからのものです。実装されたメソッドに指定された注釈が含まれているかどうかをチェックする基本的なメソッド。
メソッド/ライブラリの詳細については、こちらを参照してください。