Spring AOP AfterThrowing vs. Around Advice
        Posted  
        
            by whiskerz
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by whiskerz
        
        
        
        Published on 2010-03-23T17:02:29Z
        Indexed on 
            2010/03/24
            7:03 UTC
        
        
        Read the original article
        Hit count: 1154
        
spring-aop
|java
Hey there,
when trying to implement an Aspect, that is responsible for catching and logging a certain type of error, I initially thought this would be possible using the AfterThrowing advice. However it seems that his advice doesn't catch the exception, but just provides an additional entry point to do something with the exception.
The only advice which would also catch the exception in question would then be an AroundAdvice - either that or I did something wrong.
Can anyone assert that indeed if I want to catch the exception I have to use an AroundAdvice? The configuration I used follows:
@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());
  }
}
Note that in this example I caught all Exceptions, because it just is an example. I know its bad practice to just swallow all exceptions, but for my current use case I want one special type of exception to be just logged while avoiding duplicate logging logic.
© Stack Overflow or respective owner