Aspectj pointcut не работает с методом Spring @Recover при весенней загрузке 2 - PullRequest
0 голосов
/ 25 октября 2019

Я использую aop с пружинной загрузкой 2.1.1, у меня есть pointcut и советую регистрировать вызовы и возвращать значения методов, аннотированных пользовательской аннотацией @ LogAround

@Pointcut("@annotation(x.y.z.LogAround)")
public void logAroundJoinPoint() {}

@Before("logAroundJoinPoint()")
public void logBefore(JoinPoint joinPoint) {
// logging code
}

@AfterReturning(
          pointcut = "logAroundJoinPoint()",
          returning= "result")
     public void logAfterReturning(JoinPoint joinPoint, Object result) {
    //some logging code

     }

Этот код регистрирует вызовы методов, как ожидается дляметоды, аннотированные @LogAround , за исключением случаев, когда я использую метод, аннотированный @Recover для повторной попытки весны!

Я понятия не имею, почему это происходит.

Один из вариантовк простому журналу с методом восстановления, но я бы предпочел, если есть способ сделать эту работу. Любая помощь приветствуется.

У меня есть демонстрационный код на git_demo_code

1 Ответ

0 голосов
/ 25 октября 2019

Оба совета могут иметь конфликтующие (одинаковые) уровень приоритет . Используйте @Order, чтобы явно указать, какой совет следует применять первым. Поиграйте с порядком, установив порядок вашего аспекта на более низкий или более высокий, например, установив значение на LOWEST_PRECEDENCE или HIGHEST_PRECEDENCE:

@Order(Ordered.HIGHEST_PRECEDENCE)
@Aspect
public class YourAspect {
    ...
}
...