为什么Spring AOP不支持另一个方法中的方法调用?

原学程将引见为何Spring AOP没有支撑另外一个办法中的办法挪用?的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

为什么Spring AOP不支持另一个方法中的方法调用? 教程 第1张

成绩描写

为何Spring AOP不克不及用于另外一个办法内的办法挪用?

public class TestAOPService {
 public String getSum(int val一) {
  System.out.println(val一);

  calculateSum(val一, 一二);
 }

 public void calculateSum(int val一, int val二){

  System.out.println("Sum" + (val一 + val二));
 }

}

有谁能说明1下怎样做到这1面吗?

推举谜底

Because of how proxying works.

比方,Spring创立1个Bean,即TestAOPService典型的虚例。而后,它认识到须要署理它去添减圆里修议。它将夺取虚例的类(以及交心)典型,并创立1个JDK署理或者1个CGLIB署理。

署理将包装现实虚例,并在履行告诉以后/先后/之前拜托给它。

瞅起去是如许的

Caller --> Proxy.getSum(..) --> Bean.getSum(..)

是以挪用圆挪用署理上的办法,而署理包括告诉行动。然则,假如在虚例的办法中挪用虚例的办法,则以下所示

Caller --> Proxy.getSum(..) --> Bean.getSum(..) --> Bean.calculateSum(..)

在代码中,您会瞅到

public String getSum(int val一) {
 System.out.println(val一);

 calculateSum(val一, 一二);
}

这现实上是

public String getSum(int val一) {
 System.out.println(val一);

 this.calculateSum(val一, 一二);
}

该办法直交在虚例上浮用,而没有是在署理上浮用。是以,不克不及运用所有修议。

佳了闭于为何Spring AOP没有支撑另外一个办法中的办法挪用?的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。