我目前正在使用XML功能测试Spring的AOP,但我无法使其工作。
编辑: 只有在从类的构造函数调用方法时才会出现此问题。
我的applicationContext.xml:
<beans xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
<aop:aspectj-autoproxy/>
<bean id="aopClass" class="hu.viper.aoptest.AopClass"/>
<bean id="mainClass" class="hu.viper.aoptest.MainClass"/>
<aop:config>
<aop:aspect ref="aopClass">
<aop:pointcut id="pointCutBefore" expression="execution(* hu.viper.aoptest.MainClass.hello(..))"/>
<aop:before method="writeAOP" pointcut-ref="pointCutBefore"/>
</aop:aspect>
</aop:config>
</beans>
我的MainClass.java:
package hu.viper.aoptest;
public class MainClass {
public MainClass() {
this.hello();
}
public void hello() {
System.out.println("HELLO WORLD");
}
}
我的AopClass.java:
package hu.viper.aoptest;
import org.aspectj.lang.JoinPoint;
public class AopClass {
public void writeAOP(JoinPoint joinPoint) {
System.out.println("This is the AOP message!");
}
}
它构建完美,当我运行它时,它在netbeans的GlassFish输出上打印“HELLO WORLD”两次(我不知道为什么两次),但没有AOP消息。我的代码有什么问题?
答案 0 :(得分:0)
在proxy-target-class
中使用<aop:config>
强制使用CGLIB代理。
<aop:config proxy-target-class="true">
.......
</aop:config>
如果您在客户端使用MainClass
代理,则需要引用代理来调用hello()
而不是this
。请参考this nicely written doc about AOP Proxies了解我的目标。