Spring AOP AfterThrowing приблизительно по сравнению с советом

при попытке реализовать Аспект, который ответственен за ловлю и вход определенного типа ошибки, я первоначально думал, что это будет возможным использованием совета 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());
  }
}

Обратите внимание, что в этом примере я поймал все Исключения, потому что это просто - пример. Я знаю, что его плохая практика просто глотает все исключения, но для моего текущего варианта использования я хочу, чтобы один специальный тип исключения был просто зарегистрирован при предотвращении логики входа дубликата.

20
задан whiskerz 23 March 2010 в 17:02
поделиться

1 ответ

В Spring ссылка документ говорит:

«После выдачи совета выполняется, когда выполнение соответствующего метода завершается через выброс исключения "

К тому времени уже слишком поздно перехватывать исключение, поскольку оно уже было сгенерировано и метод завершился. Подход, который вы использовали с советом @Around, - это единственный способ на самом деле поймать исключение и обработать его до выхода из метода.

19
ответ дан 30 November 2019 в 01:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: