出于日志记录的目的,我们试图通过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表达式必须存在问题.
更新:方法中的代码没有运行,我不打算在通知中捕获异常.
有任何想法吗? Thx提前.
附: Spring框架版本是3.0.6.
解决方法:
以下是一些让我感到高兴的事情:
>你的切入点是针对你试图捕获它的异常的spring包,它应该是你试图加入执行的地方(* com.mypackage .. *(..)).
>你投掷了扔掉,但你不需要宣布抛出任何东西.建议的例外情况不会通过此代码传播.
要尝试的事情:
>将您的异常参数扩展为Exception.也许您正在寻找的例外是在不同的层次结构中.
>将切入点扩展到*包级别 – 但最好不要同时执行1和2.
>将日志记录增加到更严重的级别,以确保它不会被您的日志记录框架吞噬.