使用Spring AOP捕获Spring运行时异常

时间:2012-04-10 12:33:06

标签: java spring aop aspectj spring-aop

出于日志记录的目的,我们试图通过Spring自己的AOP捕获各种Spring的运行时异常,我必须说我已经失败了,所以我很感激如何处理这个问题。

我尝试过这样的事情:

@Aspect
@Component
public class SomeAspect {

@AfterThrowing(pointcut = "execution(* org.springframwork.oxm..*(..))", throwing = "exception")
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED)
public void adviseSpringErrorEvents(JoinPoint joinPoint, final UnmarshallingFailureException exception) throws Throwable {

         LOG.debug(this.getClass().getSimpleName() + " - Error message advice fired on method: " + joinPoint.getSignature().getName());
     }
}

该类是自动修复的,并且方面类中的其他建议正确触发,因此AspectJ表达式必须存在问题。

UPDATE:方法中的代码没有运行,我不打算在建议中捕获异常。

有什么想法吗? Thx提前。

P.S。 Spring框架版本是3.0.6。

1 个答案:

答案 0 :(得分:2)

以下是一些让我感到高兴的事情:

  1. 您的切入点是针对弹簧包,您试图捕获它的例外情况,它应该是您尝试加入execution(* com.mypackage..*(..))的地方。
  2. 你扔掉了扔掉但是你不需要声明抛出任何东西。建议的例外情况不会通过此代码传播。
  3. 要尝试的事情:

    1. 将您的例外参数展开到Exception。也许您正在寻找的例外处于不同的层次结构中。
    2. 将切入点扩展到*包级别 - 但最好不要同时执行1和2。
    3. 将日志记录增加到更严重的级别,以确保它不会被您的日志记录框架吞噬。