在某些方法之前(或者现在所有的方法),我必须调用Aspect的方法来记录一些消息。我的应用程序正常运行,但没有调用Aspect类的任何方法。
我在本地应用程序中的相同文件夹结构中尝试了相同的cutpoint,但是当我尝试将其包含在ZK中时,我遇到了问题。我还修改了application-context.xml
来支持AOP。
这是我的方面类:
package com.mypckg.services.impl;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class MyIntercpeter {
@Pointcut("execution(* com.mypckg.services.impl.MyService.getStudents(..))")
public void performance() {
}
@Before("performance()")
public void doSomethingBeforeExecution() {
System.out.println("Before execution method called...");
}
@AfterReturning("performance()")
public void doSomethingAfterExecution() {
System.out.println("After execution method called...");
}
}
我在application-context.xml
中所做的修改是
<beans .........
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
..........
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
.....
<aop:aspectj-autoproxy />
<context:annotation-config />
我错过了什么吗?提前谢谢。
答案 0 :(得分:0)
看起来你错过了一个明显的事情:你忘了在spring config中声明bean了吗?
来自Spring docs:
Spring AOP仅支持Spring bean的方法执行连接点,因此您可以将切入点视为匹配Spring bean上方法的执行。
http://static.springsource.org/spring/docs/2.0.x/reference/aop.html
您可以使用注释或配置声明bean。
最好放一个你使用的弹簧版本(我认为它是2.0.x)。