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忠告的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Spring AOP AfterThrowing Vs.Above忠告


- value & 是什么意思?0xff 在 Java 中做什么? 2022-01-01
- 如何使用WebFilter实现授权头检查 2022-01-01
- Jersey REST 客户端:发布多部分数据 2022-01-01
- 将log4j 1.2配置转换为log4j 2配置 2022-01-01
- Safepoint+stats 日志,输出 JDK12 中没有 vmop 操作 2022-01-01
- Spring Boot连接到使用仲裁器运行的MongoDB副本集 2022-01-01
- 从 finally 块返回时 Java 的奇怪行为 2022-01-01
- C++ 和 Java 进程之间的共享内存 2022-01-01
- Eclipse 插件更新错误日志在哪里? 2022-01-01
- Java包名称中单词分隔符的约定是什么? 2022-01-01