gpt4 book ai didi

java - Spring AOP异常处理如果存在catch block 则不执行建议

转载 作者:行者123 更新时间:2023-12-01 19:52:25 25 4
gpt4 key购买 nike

我正在使用 Spring AOP 来记录我的类中的异常。它应该记录类的每个方法中抛出的所有异常。

@AfterThrowing(pointcut = "execution(* *.*(..))", throwing = "e")
protected void method(JoinPoint joinPoint,Exception e) throws Throwable {

但是,如果该方法有一个捕获异常的 try catch block ,则不会触发建议。如果我删除 try catch block 并在方法定义中添加 throws 子句,则会调用建议。这是 AOP 应该如何工作的,因为它没有意义?我只想要一个通用的异常处理代码,用于在一个地方而不是在每个方法中处理所有异常。

最佳答案

是的,这就是它应该如何工作的。术语“抛出后”已经说明了建议何时生效:在目标方法抛出异常之后。不过,您的方法会捕获并且永远不会抛出您想要拦截的异常。那么你能做什么呢?

  • 您必须在调用链上一级或多级拦截它,或者
  • 您从 Spring AOP 升级到 AspectJ 并使用 handler() 切入点来拦截方法中的 catch block ,如 AspectJ manual 中所述。 。您还可以在 my answer to another question 中找到 handler() 的示例代码。 。 Spring manual 中描述了如何使用 LTW 激活完整的 AspectJ .

作为旁注,我想知道为什么您首先要尝试拦截(希望正确)处理的异常。你的示例代码在哪里?您的用例是什么?

关于java - Spring AOP异常处理如果存在catch block 则不执行建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50924926/

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