Why Spring AOP is not working for method call inside another method?(为什么Spring AOP不支持另一个方法中的方法调用?)
本文介绍了为什么Spring AOP不支持另一个方法中的方法调用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
为什么Spring AOP不能用于另一个方法内的方法调用?
public class TestAOPService {
public String getSum(int val1) {
System.out.println(val1);
calculateSum(val1, 12);
}
public void calculateSum(int val1, int val2){
System.out.println("Sum" + (val1 + val2));
}
}
有谁能解释一下如何做到这一点吗?
推荐答案
Because of how proxying works.
例如,Spring创建一个Bean,即TestAOPService
类型的实例。然后,它意识到需要代理它来添加方面建议。它将获取实例的类(和接口)类型,并创建一个JDK代理或一个CGLIB代理。
代理将包装实际实例,并在执行通知之后/前后/之前委托给它。
看起来是这样的
Caller --> Proxy.getSum(..) --> Bean.getSum(..)
因此调用方调用代理上的方法,而代理包含通知行为。但是,如果在实例的方法中调用实例的方法,则如下所示
Caller --> Proxy.getSum(..) --> Bean.getSum(..) --> Bean.calculateSum(..)
在代码中,您会看到
public String getSum(int val1) {
System.out.println(val1);
calculateSum(val1, 12);
}
这实际上是
public String getSum(int val1) {
System.out.println(val1);
this.calculateSum(val1, 12);
}
该方法直接在实例上调用,而不是在代理上调用。因此,不能应用任何建议。
这篇关于为什么Spring AOP不支持另一个方法中的方法调用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
织梦狗教程
本文标题为:为什么Spring AOP不支持另一个方法中的方法调用?


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