Dep*_*sio 6 java aspectj super pointcut aspect
为此做一个简洁的标题很难.
无论如何,想象一下我有一个父类:
public class Shape {
public Dimensions getDimensions() {
// Does some generic stuff.
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个派生类来覆盖getDimensions方法:
public class Circle extends Shape {
public Dimensions getDimensions() {
// Does some stuff.
super.getDimensions();
}
}
Run Code Online (Sandbox Code Playgroud)
当我创建一个带有切入点的方面时Shape.getDimensions,切入点Circle.getDimensions被调用两次:一次用于Circle.getDimensions,然后一次调用super.getDimensions.
切入点看起来像这样: @Pointcut("execution(* Shape.getDimensions(..))")
我在建议中添加了一个黑客来检查声明类型的名称(使用JoinPoint.getSignature().getDeclaringType().getName()),但我发现它相当粗糙,感觉有点像黑客.我认为必须有一个更好的方法来做到这一点.
在那儿?
如果格式不是很好,请道歉.第一次在这里问一个问题(我通常可以找到答案).
可能你的意思是你的切入点使用Shape+.getDimensions()(带加号),否则它根本不会匹配Circle.
无论如何,你可以像这样解决问题(我希望原生的AspectJ语法对你来说没问题,我发现它更清晰,更具表现力):
public aspect ShapeAspect {
pointcut getDimensions() : execution(* Shape+.getDimensions());
pointcut getDimensionsNoSuper() : getDimensions() && !cflowbelow(getDimensions());
after() : getDimensionsNoSuper() {
System.out.println(thisJoinPointStaticPart);
}
}
Run Code Online (Sandbox Code Playgroud)