Java 在SpringAOP中,@Around建议到底是如何工作的?
我正在学习Spring AOP模块,我对的建议究竟是如何运作的有些疑问 阅读正式文件: 我可以读到这篇关于周围建议的文章: 环绕建议:围绕连接点(如方法)的建议 调用。这是最有力的建议。围绕建议 可以在方法调用前后执行自定义行为。信息技术 还负责选择是否继续到连接点 或者通过返回其自己的方法来缩短建议方法的执行 返回值或引发异常 这是环绕建议的顺序图: 因此,根据我的理解,我可以定义一个建议(我的自定义行为),它将在切入点指定的关节点前后执行 例如,我可以用以下方式定义一个关于建议的:Java 在SpringAOP中,@Around建议到底是如何工作的?,java,spring,spring-mvc,aop,spring-aop,Java,Spring,Spring Mvc,Aop,Spring Aop,我正在学习Spring AOP模块,我对的建议究竟是如何运作的有些疑问 阅读正式文件: 我可以读到这篇关于周围建议的文章: 环绕建议:围绕连接点(如方法)的建议 调用。这是最有力的建议。围绕建议 可以在方法调用前后执行自定义行为。信息技术 还负责选择是否继续到连接点 或者通过返回其自己的方法来缩短建议方法的执行 返回值或引发异常 这是环绕建议的顺序图: 因此,根据我的理解,我可以定义一个建议(我的自定义行为),它将在切入点指定的关节点前后执行 例如,我可以用以下方式定义一个关于建议的: @Ar
@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;
}
在调用服务方法之前和之后执行已实现的更改行为。是这样吗
我不能完全理解的是,ProceedingJoinPoint参数的准确程度和使用方法
据我所知,它用于选择是否执行特定操作,但具体如何工作
关于如何正确使用AOP建议的另一个疑问是如何回答以下问题:
如果我想试着抓住机会,我应该用什么建议
例外情况
我认为在这种情况下,答案是在抛出通知后使用,,因为当匹配的方法执行通过抛出异常退出时,通知就会执行
但我不确定这一点,因为据我所知,只有在方法抛出异常时才会执行建议。或者在这种情况下,我必须使用**环绕建议*
Tnx实际上,所有这些AOP注释都是作为
AbstractAspectJAdvice
的具体实现公开的。即使它是@afterhrowing
,它的AspectJAAfterThrowingAdvice
仍然存在并被调用:
try {
return mi.proceed();
}
catch (Throwable t) {
if (shouldInvokeOnThrowing(t)) {
invokeAdviceMethod(getJoinPointMatch(), null, t);
}
throw t;
}
@Around
确实具有更强大的功能,并为最终用户提供了更多的控制,以处理过程连接点
研究所有这些建议类型由您自己决定,但是使用@Around
您可以访问所有建议类型,尽管您不应该忘记从那里调用mi.contrace()
。当然,如果你需要按照你的逻辑去做的话。虽然“研究”春季AOP肯定是出于好意,但你撰写的详尽的理论论文不会让你对这个主题有太多的理解。我的建议是实际编写代码,并尝试一下您的理论,以找出它们是否正确。你的问题太复杂了,同时你可以通过实际的尝试来发现。