如何在AspectJ中的AfterThrowing中吞下异常

时间:2010-12-09 08:19:16

标签: java aspectj

在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();
 }
}

上面,它没有吞下异常。 testThrowable()的调用者仍然收到异常。我希望来电者不要收到例外。怎么办呢? 感谢。

2 个答案:

答案 0 :(得分:6)

我认为不能在AfterThrowing中完成。您需要使用Around

答案 1 :(得分:5)

我的解决方案!

@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());
        }
    }

}

再次感谢。