Spring AOP AfterThrowing vs. Around Advice(Spring AOP AfterThrowing Vs.Above忠告)
问题描述
在尝试实现负责捕获和记录特定类型的错误的方面时,我最初认为使用AfterThrowing建议可以做到这一点。然而,他的建议似乎没有捕捉到异常,而只是提供了一个额外的入口点来处理异常。
唯一也能捕捉到有问题的异常的建议是一个AoundAdvices值--要么就是我做错了什么。
有人能断言,如果我真的想要捕捉异常,我必须使用AoundAdvicesTM吗?我使用的配置如下:
@Pointcut("execution(* test.simple.OtherService.print*(..))")
public void printOperation() {}
@AfterThrowing(pointcut="printOperation()", throwing="exception")
public void logException(Throwable exception) {
System.out.println(exception.getMessage());
}
@Around("printOperation()")
public void swallowException(ProceedingJoinPoint pjp) throws Throwable {
try {
pjp.proceed();
} catch (Throwable exception) {
System.out.println(exception.getMessage());
}
}
请注意,在本例中我捕获了所有异常,因为它只是一个示例。我知道只接受所有异常是不好的做法,但对于我当前的用例,我希望只记录一种特殊类型的异常,同时避免重复的日志记录逻辑。
推荐答案
Spring reference文档称:
"抛出建议后,当 匹配的方法执行通过以下方式退出 引发异常"
到那时,捕获异常已经太晚了,因为它已经被抛出,方法已经退出。您使用@COMPOVER建议所采用的方法是在方法退出之前实际捕获异常并处理它的唯一方法。
这篇关于Spring AOP AfterThrowing Vs.Above忠告的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!