при попытке реализовать Aspect, который отвечает за перехват и регистрацию ошибок определенного типа, я изначально думал, что это возможно, используя совет AfterThrowing. Однако, похоже, что его совет не ловит исключение, а просто предоставляет дополнительную точку входа, чтобы сделать что-то с исключением.
Единственным советом, который также поймает рассматриваемое исключение, будет AroundAdvice - либо я, либо я сделал что-то не так.
Кто-нибудь может утверждать, что действительно, если я хочу поймать исключение, я должен использовать AroundAdvice? Я использовал следующую конфигурацию:
@Pointcut("execution(* test.simple.OtherService.print*(..))")
public void printOperation() {}
@AfterThrowing(pointcut="printOperation()", throwing="exception")
public void logException(Throwable exception) {
System.out.println(exception.getMessage());
}
@Around("printOperation()")
public void swallowException(ProceedingJoinPoint pjp) throws Throwable {
try {
pjp.proceed();
} catch (Throwable exception) {
System.out.println(exception.getMessage());
}
}
Обратите внимание, что в этом примере я поймал все исключения, потому что это просто пример. Я знаю, что это плохая практика - просто проглотить все исключения, но для моего текущего варианта использования я хочу, чтобы один особый тип исключения просто регистрировался, избегая дублирования логики ведения журнала.