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忠告


基础教程推荐
- 无法复制:“比较方法违反了它的一般约定!" 2022-01-01
- REST Web 服务返回 415 - 不支持的媒体类型 2022-01-01
- 使用堆栈算法进行括号/括号匹配 2022-01-01
- 存储 20 位数字的数据类型 2022-01-01
- RabbitMQ:消息保持“未确认"; 2022-01-01
- Struts2 URL 无法访问 2022-01-01
- 修改 void 函数的输入参数,然后读取 2022-01-01
- Spring AOP错误无法懒惰地为此建议构建thisJoinPoin 2022-09-13
- 问题http://apache.org/xml/features/xinclude测试日志4j 2 2022-01-01
- 如何对 Java Hashmap 中的值求和 2022-01-01