Spring AOP pointcut для всех публикуемых c методов аннотированного класса (включая методы родительского класса) - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть два класса

public class ParentTestClass {
    public void publicMethodOfParent() {
    }
}

@Component
@MyAnnotation
public class ChildTestClass extends ParentTestClass {
    public void publicMethodOfChild() {
    }
}

В Spring AOP мне нужно обернуть:

  • все вызовы для всех методов publi c, аннотированных @MyAnnotation, если аннотация помещается на уровень класса
  • все методы, которые отмечены @MyAnnotation, если аннотация находится на уровне метода.

Вот мой pointcut


@Around("(@within(MyAnnotation) && execution(public * *(..))) || @annotation(MyAnnotation)")
public Object myWrapper(ProceedingJoinPoint invocation) throws Throwable {
   // ...
}

Это работает для public c методов ChildTestClass, но ParentTestClass#publicMethodOfParent не переносится при выполнении вызова childTestClass.publicMethodOfParent() Как включить родительские методы?

1 Ответ

2 голосов
/ 24 апреля 2020

Следующее выражение pointcut также будет перехватывать родительские методы.

Из документации

@Pointcut("within(com.app..*) && execution(public * com.app..*.*(..))")
public void publicMethodsInApp() {
}

@Around("(publicMethodsInApp() && @target(MyAnnotation)) || "
        + "(publicMethodsInApp() && @annotation(MyAnnotation))")
public Object myWrapper(ProceedingJoinPoint invocation) throws Throwable {
 //..
}

@ target: пределы соответствия для точек соединения ( выполнение методов при использовании Spring AOP), где класс исполняемого объекта имеет аннотацию данного типа.

...