@AspectJ pointcut for subclasses of a class with an annotation

泄露秘密 提交于 2019-11-28 01:15:36

问题


I'm looking for a pointcut that matches method executions in classes that subclass a class with a specific annotation. The excellent AspectJ cheat sheet helped me to create the following pointcut:

within(@my.own.annotations.AnnotationToMatch *) && execution(* *(..))

This matches all method calls of a class A that carries the @AnnotationToMatch, but not method of a class B that extends A. How can I match both?


回答1:


public aspect AnnotatedParentPointcutAspect {   

//introducing empty marker interface
declare parents : (@MyAnnotation *) implements TrackedParentMarker;

public pointcut p1() : execution(* TrackedParentMarker+.*(..));

before(): p1(){
    System.out.println("Crosscutted method: "
            +thisJoinPointStaticPart.getSignature().getDeclaringTypeName()
            +"." 
            +thisJoinPointStaticPart.getSignature().getName());
}
}



回答2:


Another and simpler possibility is to declare the annotation as @Inherited - thus it applies to the subclasses as well.



来源:https://stackoverflow.com/questions/7122106/aspectj-pointcut-for-subclasses-of-a-class-with-an-annotation

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!