一尘不染

Spring AOP不适用于另一个方法中的方法调用

spring

ABC.java中定义了两种方法

public void method1(){
   .........
   method2();
  ...........
}


public void method2(){
  ...............
  ...............  
}

我想有AOP上的呼叫方法2。所以,我创建了一个类,AOPLogger.java,具有在方法提供方面功能的checkAccess
在配置文件中,我不喜欢的东西下面

<bean id="advice" class="p.AOPLogger" />
<aop:config>
  <aop:pointcut id="abc" expression="execution(*p.ABC.method2(..))" />
  <aop:aspect id="service" ref="advice">
    <aop:before pointcut-ref="abc" method="checkAccess" />          
  </aop:aspect>
</aop:config>

但是当调用我的method2时,不会调用AOP功能,即不会调用AOPLogger类的checkAccess方法。


阅读 769

收藏
2020-04-11

共1个答案

一尘不染

该方面应用于围绕bean 的代理。请注意,每次获得对bean的引用时,实际上并不是配置中引用的类,而是实现相关接口的综合类,该类委托实际的类并添加功能(例如AOP)。

在上面的示例中,你直接在类上调用,而如果将该类实例作为Spring bean注入到另一个实例中,则将其作为其代理注入,因此将在代理上调用方法调用(并且将触发方面) )

如果要实现上述目标,则可以将method1/ 拆分method2为单独的bean,或使用非基于Spring的AOP框架。

2020-04-11