Как проглотить исключение на AfterThrowing в AspectJ - PullRequest
8 голосов
/ 09 декабря 2010

В 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 ]

6 голосов
/ 09 декабря 2010

Я думаю, что это невозможно сделать за AfterThrowing.Вам нужно использовать Around.

5 голосов
/ 09 декабря 2010

Мое решение!

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

}

Еще раз спасибо.

...