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方法。
该方面应用于围绕bean 的代理。请注意,每次获得对bean的引用时,实际上并不是配置中引用的类,而是实现相关接口的综合类,该类委托实际的类并添加功能(例如AOP)。
在上面的示例中,你直接在类上调用,而如果将该类实例作为Spring bean注入到另一个实例中,则将其作为其代理注入,因此将在代理上调用方法调用(并且将触发方面) )
如果要实现上述目标,则可以将method1/ 拆分method2为单独的bean,或使用非基于Spring的AOP框架。