2010-12-09 8 views
8

En AspectJ, quiero tragar una excepción.Cómo tragar una excepción en AfterThrowing en AspectJ

@Aspect 
public class TestAspect { 

@Pointcut("execution(public * *Throwable(..))") 
void throwableMethod() {} 

@AfterThrowing(pointcut = "throwableMethod()", throwing = "e") 
public void swallowThrowable(Throwable e) throws Exception { 
    logger.debug(e.toString()); 
} 
} 

public class TestClass { 

public void testThrowable() { 
    throw new Exception(); 
} 
} 

Arriba, no se tragó la excepción. La llamada de TestThrowable() aún recibió la excepción. Quiero que la persona que llama no reciba una excepción. ¿Cómo puede hacer esto? Gracias.

Respuesta

5

Creo que no se puede hacer en AfterThrowing. Debe usar Around.

+0

Gracias Tadeusz! ¡Lo he resuelto! – user389227

5

Mi solución!

@Aspect 
public class TestAspect { 

    Logger logger = LoggerFactory.getLogger(getClass()); 

    @Pointcut("execution(public * *Throwable(..))") 
    void throwableMethod() {} 

    @Around("throwableMethod()") 
    public void swallowThrowing(ProceedingJoinPoint pjp) { 
     try { 
      pjp.proceed(); 
     } catch (Throwable e) { 
      logger.debug("swallow " + e.toString()); 
     } 
    } 

} 

Gracias de nuevo.