gpt4 book ai didi

java - 为什么 Spring AOP 不适用于另一个方法内的方法调用?

转载 作者:行者123 更新时间:2023-11-29 05:29:30 25 4
gpt4 key购买 nike

为什么 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 类型的一个实例。然后它意识到它需要代理它来添加方面建议。它将采用实例的类(和接口(interface))类型并创建 JDK 代理或 CGLIB 代理。

代理将包装实际实例并在执行建议之后/周围/之前委托(delegate)给它。

看起来像这样

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);
}

该方法直接在实例上调用,而不是在代理上调用。因此,无法应用任何建议。

关于java - 为什么 Spring AOP 不适用于另一个方法内的方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21625588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com