【发布时间】:2015-03-22 10:54:46
【问题描述】:
我正在研究 Spring AOP 模块,我对 AROUND 建议的具体工作原理有些怀疑。
阅读官方文档:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html
我可以阅读关于AROUND ADVICE的这篇文章:
围绕通知:围绕连接点的通知,例如方法 调用。这是最有力的建议。周边咨询 可以在方法调用前后执行自定义行为。它 还负责选择是否前往加入点 或通过返回自己的方法来缩短建议的方法执行 返回值或抛出异常。
这是around通知的序列图:
因此,据我所知,我可以定义一个建议(我的自定义行为),它将在 切入点指定的关节点之前和之后执行。
例如,我可以用这种方式定义 AROUND ADVICE:
@Around(“execution(@example.Cacheable * rewards.service..*.*(..))”)
public Object cache(ProceedingJoinPoint point) throws Throwable {
Object value = cacheStore.get(cacheKey(point));
if (value == null) {
value = point.proceed();
cacheStore.put(cacheKey(point), value);
}
return value;
}
在调用服务方法之前和之后执行已实现的 chaching 行为。对吗?
我无法完全理解的是 ProceedingJoinPoint 点参数究竟是如何以及如何使用的。
据我了解,它用于选择是否执行特定操作,但具体如何工作?
关于如何正确使用 AOP 建议的另一个疑问是如何回答以下问题:
如果我想尝试捕捉,我必须使用哪些建议 例外?
我认为在这种情况下,答案是使用 After throwing 建议,因为该建议会在匹配的方法执行通过抛出异常退出时执行。
但我不确定,因为据我了解,只有在方法引发异常时才会执行建议。或者在这种情况下,我必须使用 **AROUND ADVICE* ?
Tnx
【问题讨论】:
-
虽然“学习”Spring AOP 肯定表现出良好的意图,但您撰写详尽的理论论文不会让您深入理解该主题。我的建议是实际编写代码并尝试一下您的理论,以找出它们是对还是错。您的问题是如此详尽,同时您可以通过实际尝试发现。
标签: java spring spring-mvc aop spring-aop