gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:27:21 31 4
gpt4 key购买 nike

出于日志记录的目的,我们试图通过 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 表达式一定有问题。

更新:方法中的代码没有运行,我无意在建议中捕获异常。

有什么想法吗?提前致谢。

附言Spring框架版本为3.0.6。

最佳答案

以下是一些让我印象深刻的事情:

  1. 你的切入点是针对你试图捕获的异常所在的 spring 包,它应该是你试图加入的地方 execution(* com.mypackage..*(..))
  2. 你正在抛出 throwable 但你不需要声明任何被抛出的东西。被告知的异常不会通过此代码传播。

要尝试的事情:

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

关于java - 使用 Spring AOP 捕获 Spring 运行时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10088881/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com