spring 异常处理和事后通知

nnvyjq4y  于 2023-03-16  发布在  Spring
关注(0)|答案(1)|浏览(118)

我使用的是带spring Boot 的AOP。在一些方法成功执行之后,我在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。任何帮助将不胜感激。

ee7vknir

ee7vknir1#

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

  • @After总是在方法终止后执行,无论是否有异常。
  • @AfterThrowing异常或
  • @AfterReturning定期。后者是你正在寻找的,它甚至让你访问返回值,如果你喜欢记录它左右。

但是,这些通知类型都不能让您处理异常,正如我还解释了here一样,您需要使用@Around通知。

相关问题