我很困惑,编写一个匹配方法的所有执行的切入点。我尝试了切入点,它应该匹配类Alpha
的所有方法执行:
execution(* Alpha.*(..))
使用以下class -hierachy
public class Alpha {
public void alphaMethod() {...}
}
public class Beta extends Alpha {
public void betaMethod() {
alphaMethod();
}
}
如果主程序在alphaMethod
- 实例上调用Beta
,我的建议会按预期调用,但主程序调用{{1}}也会在我的内部调用betaMethod
建议没有被调用,我不明白为什么。
方面清晰度:
alphaMethod
主-方法:
@Aspect
public class MyAspect {
@Before(value = "execution(* Alpha.*(..))", argNames="joinPoint")
public void myAdvice(JoinPoint joinPoint) {
System.out.println("BEFORE: " + joinPoint.getSignature());
}
}
答案 0 :(得分:1)
答案 1 :(得分:1)
正如已经回答的那样,原因很清楚。您可以通过使用加载时编织而不是代理来解决这个问题(我想它归结为某个地方的配置选项和对AspectJ的依赖,如果还没有依赖它)或者将bean注入其自身作为依赖,然后实现
public void betaMethod() {
selfBean.alphaMethod();
}
这将有效,因为selfBean
与this
的引用不同,前者是对代理的引用,后者是对原始代理对象的引用。