при попытке реализовать Аспект, который отвечает за обнаружение и регистрацию определенного типа ошибок, изначально я думал, что это возможно с помощью совета AfterTrowing. Однако кажется, что его совет не исключает исключения, но просто предоставляет дополнительную точку входа, чтобы что-то сделать с исключением.Spring AOP AfterTrowing vs. Around Advice
Единственный совет, который также поймал бы рассматриваемое исключение, был бы AroundAdvice - либо это, либо я сделал что-то неправильно.
Может ли кто-нибудь утверждать, что действительно, если я хочу поймать исключение, я должен использовать AroundAdvice? Используемая конфигурация I:
@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());
}
}
Обратите внимание, что в этом примере я поймал все Исключения, потому что это просто пример. Я знаю, что его плохая практика просто проглатывает все исключения, но для моего нынешнего варианта использования я хочу, чтобы один специальный тип исключения был просто зарегистрирован, избегая дублирования логики ведения журнала.
Вы действительно не использовали бы оба совета и после того, как бросили совет на той же точке соединения, как это. Вокруг совет является целостным и позволяет полностью контролировать выполнение. Поскольку исключение может быть исключено из вашего совета (из-за того, что у вас есть блок try/catch, который не перебрасывает исключение), совет после броска никогда не будет применен. –