Aspect를 구현하려고 할 때 특정 유형의 오류를 포착하고 기록하는 경우 처음에는 AfterThrowing 조언을 사용하여 가능하다고 생각했습니다. 그러나 그의 충고가 예외를 잡아 내지는 못하지만, 예외로 무언가를하기위한 추가 진입 점을 제공합니다.Spring AOP AfterThrowing 대 Advice around
또한 문제의 예외를 잡을 수있는 유일한 조언은 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());
}
}
이 예제에서는 모든 예외를 포착했습니다. 나는 모든 예외를 삼키기위한 나쁜 습관을 알고 있지만, 현재의 유스 케이스의 경우 중복 로깅 로직을 피하면서 방금 로깅되는 특별한 유형의 예외를 원한다.
정말 주위의 조언과 같은 조인 포인트에 대한 조언을 던진 후에 사용하지 않을 것입니다. around advice는 전체 론적이며 실행을 완전히 제어 할 수 있습니다. 주위의 조언 (예외를 다시 던지지 않는 try/catch 블록 때문에)에서 예외가 throw 될 수 없으므로 이후의 조언은 적용되지 않습니다. –