我有以下配置:
@Aspect
public class MyAspect {
@Around(@annotation(SomeAnnotation))
public Object myMethod(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("Hello...");
}
}
并具有以下bean定义:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<bean id="myAspect" class="MyAspect" />
</beans>
我看到该行为未在运行时应用于@SomeAnnotation带注释的方法.知道为什么吗?
谢谢.
解决方法:
确保带有@SomeAnnoation的类是由Spring容器创建的.通过创建用于包装对象的代理类,Spring将AOP应用于从容器中检索到的类.然后,此代理类在调用该对象的方法之前和之后执行Aspect.
如果不确定,请尝试调试使用类的位置.您应该看到该对象不是类的实例,而是代理对象.