@AspectJ pointcut для подклассов класса с аннотацией - PullRequest
5 голосов
/ 19 августа 2011

Я ищу pointcut, который соответствует выполнению методов в классах, которые подкласс класса с определенной аннотацией. Превосходная шпаргалка AspectJ помогла мне создать следующий pointcut:

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

Это соответствует всем вызовам методов класса A, который содержит @AnnotationToMatch, но не метод класса B, расширяющего A. Как я могу сопоставить оба?

Ответы [ 2 ]

3 голосов
/ 24 августа 2011

Другая и более простая возможность - объявить аннотацию как @Inherited - таким образом, она применяется и к подклассам.

3 голосов
/ 22 августа 2011
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());
}
}
...