aspectj не перехватывает методы с аннотацией - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь заставить аспектj перехватывать аннотированные методы:

@Aspect
    public class InterceptMeAspect {
      @Around("execution(* *(..)) && within(@InterceptMe *)")
      public Object doIntercept(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        System.out.println("intercepted:");
        return proceedingJoinPoint.proceed();
      }
    }

    public class InterceptedExample {
        @InterceptMe
        public void doSomething(){

        }
    }

Для краткости я удалил! Inside (InterceptMeAspect), но он все равно не слишком перехватывает.Если я удаляю ограничение аннотации (в пределах (@InterceptMe *)), оно работает, но перехватывает все и создает большую проблему.

Выходной байт-код, кажется, содержит аннотации без изменений, поэтому я ожидаю, что аннотациякритерии для соответствия.Я делаю или пытаюсь сделать ткачество во время компиляции.Это важно, потому что у меня есть другой аспект, который работает, используя тот же подход, описанный выше.Я подозреваю, что этот аспект мешает этому, но последний байт-код не должен иметь аннотации, верно?

РЕДАКТИРОВАТЬ: Это код для другого аспекта:

@Around(
      "execution(protected * *(..)) && !within(com.walterjwhite.logging..*) && !call(*.new(..)) && within(@ContextualLoggable *) && !within(@NonLoggable *)")

Iиметь общий аспект ведения журнала и особый контекстный аспект ведения журнала.Я предполагаю, что это также неправильно написано и должно соответствовать формату сверху.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

вместо @Around("execution(* *(..)) && within(@InterceptMe *)").Это должно быть @Around("execution(* *(..)) && @annotation(your.package.InterceptMe )")

Или, если вам нужно получить доступ к некоторым свойствам из аннотации:

@Around("execution(* *(..)) && @annotation(interceptMeVar)")
public Object doIntercept(ProceedingJoinPoint proceedingJoinPoint,InterceptMe interceptMeVar)
0 голосов
/ 05 декабря 2018

Поскольку вы используете пользовательскую аннотацию, вы должны использовать @annotation вместо:

@Aspect
    public class InterceptMeAspect {
      @Around("execution(* *(..)) && @annotation(com.or.org.package.InterceptMe)")
...