【问题标题】:Exception handling and after advice异常处理和事后建议
【发布时间】:2019-06-13 10:13:50
【问题描述】:

我将 AOP 与 Spring Boot 一起使用。在成功执行某些方法后,我在 AOP 中使用 @After 建议进行一些数据库插入。在一种情况下,如果该方法在某处抛出异常,那么我不想执行我的 @After 建议调用。

我不知道如果我在 AOP 中捕获异常,我的 after advice 方法也会执行。

@After(value = "execution(* saveUpdateMeasures(..)) and args(addMeasure)")
public void afterAdviseMeasure(JoinPoint joinPoint,AddMeasures addMeasure) throws Exception {
    logger.info("url is " + request.getRequestURL() + "?"  + request.getQueryString()); 
    saveUserLog(addMeasure.getUserId(), "add update measure",addMeasure.getReviewId()); 
}

所以如果我的方法saveUpdateMeasures() 成功执行,没有任何异常,那么只有我正在寻找执行afterAdviseMeasure。任何帮助将不胜感激。

【问题讨论】:

  • 您介意接受并支持我的正确答案吗?然后我可以将其他问题标记为这个问题的重复,因为这经常被问到。谢谢。

标签: aop spring-aop


【解决方案1】:

请阅读 Spring AOP 手册,尤其是关于advice types 的章节。一般来说,使用新技术之前阅读手册总是一个好主意。 ;-)

  • @After 总是在方法终止后执行,无论是否有异常。仅运行更专业的版本
  • @AfterThrowing 异常或
  • @AfterReturning 定期。后者是您正在寻找的内容,如果您喜欢记录它,它甚至可以让您访问返回值。

不过,这些建议类型都不能让您处理异常,正如我还解释过 here 一样。您需要为此使用@Around 建议。

【讨论】:

    猜你喜欢
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多