我正在使用 Spring 3.2
和 AspectJ 1.7.1
。 (我不太可能在不久的将来升级到更高版本。)
我需要为抽象类中的 protected 方法定义一个切入点。 AFAIK 我需要 AspectJ
用于非公共(public)方法,所以我只尝试使用 (AspectJ
) 注释:
package com.aspects;
@Aspect
public class Aspect{
@Before("execution(* com.x.y.x.MyClass.myMethod(..))")
public void beforeAspect(){
//do something here
}
}
在我的 beans.xml
中我有:
<aop:aspectj-autoproxy />
<bean id="myAspect" class="com.aspects.Aspect"/>
我已经检查并创建了我的 Aspect
类(正在调用构造函数),启动应用程序时没有抛出异常。
但是我无法调用 beforeAspect
。对于非抽象类中的公共(public)方法,这是可行的。我怎样才能让它适用于抽象类中的 protected 方法?
最佳答案
您应该在抽象类之后添加一个+
符号。
所以
"execution(* com.x.y.x.MyClass.myMethod(..))"
应该看起来像:
"execution(* com.x.y.x.MyClass+.myMethod(..))"
↑
+
是关于扩展给定类 (MyClass
) 或实现接口(interface)的继承。
关于java - 抽象类的 protected 方法的 Spring 切入点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21002992/