Java 为什么SpringAOP不适用于另一个方法中的方法调用?
为什么SpringAOP不适用于另一个方法中的方法调用Java 为什么SpringAOP不适用于另一个方法中的方法调用?,java,spring-aop,Java,Spring Aop,为什么SpringAOP不适用于另一个方法中的方法调用 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("Su
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));
}
}
有人能解释一下如何做到这一点吗?
例如,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);
}
该方法直接在实例上调用,而不是在代理上调用。因此,无法应用任何建议