Pointcut для конкретных методов одного класса - PullRequest
0 голосов
/ 11 января 2019

Насколько я знаю, есть два способа добиться этого:

  1. Использование точек на основе аннотаций:
    Просто добавьте аннотацию к этим методам и используйте @annotation в выражении pointcut.
    @Pointcut("@annotation(org.springframework.transaction.annotation.Transactional)")
    public void myPointcut() {}
    
  2. использовать много много выражений выполнения
    @Pointcut("execution(* me.mypackage.MyClass.method0(*))||" +
              "execution(* me.mypackage.MyClass.method1(*))||"+
              "execution(* me.mypackage.MyClass.method2(*))||"+
              "execution(* me.mypackage.MyClass.method3(*))||"+
              "execution(* me.mypackage.MyClass.method4(*))")
    public void myPointcut() {}
    

Первый метод должен быть намного удобнее. Однако я не хочу добавлять дополнительные пользовательские аннотации к этим методам. В моей ситуации я просто хочу сделать свои pointcut «невидимыми» для этих методов.
Итак, я должен использовать второй метод. Но это кажется мне слишком сложным, есть ли способ сократить это выражение?

1 Ответ

0 голосов
/ 11 января 2019

Просто объедините внутри и выполнение, оно должно работать нормально.

@Pointcut("within(me.packages.TargetClass)")
public void classPointcut() {}
@Pointcut("execution(* method1(*)) && execution(* method2)")
public void methodPointcut() {}

А чтобы связать совет, например, с советом:

@Around("classPointcut() && methodPointcut()")
public Object foo(ProceedingJoinPoint pjp)
...