Reputation: 25976
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?
Upvotes: 5
Views: 5634
Reputation: 25976
Another and simpler possibility is to declare the annotation as @Inherited - thus it applies to the subclasses as well.
Upvotes: 3
Reputation: 2208
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());
}
}
Upvotes: 3