包含继承的类的所有方法的切入点

时间:2012-05-28 13:37:24

标签: java aspectj spring-aop pointcut

我正在玩aop和aspectj并发现(对我来说)意想不到的行为。

aspectj-docs中,我找到了以下示例 - 切入点:

execution(public void Middle.*())

用于以下类定义(我略微更改了原始示例):

class Super {
    public void m() { ... }
}
class Middle extends Super {
}
class Sub extends Middle {
    @Override
    public void m() { ... }
}

该例子的描述说明:

  

[切入点]为所有返回void且没有参数的公共方法执行所有方法执行,这些参数在Middle 中声明或继承,即使这些方法在子类中重写中间。

这个示例对我来说很好,但是如果类Sub没有覆盖m(),那么从{outside}到m实例的方法调用不是Sub截获。这不违反文件吗?

我有another problem with pointcuts in inhertied classes这是由使用代理引起的。但在这种情况下,使用代理不会导致此行为,因为代理应该为所有代理类提供方法。或者我错过了什么?

我的方面定义:

@Aspect
public class MyAspect {
    @Before(value = "execution(* Middle.*(..))", argNames="joinPoint")
    public void myAdvice(JoinPoint joinPoint) {
        System.out.println("adviced: " + joinPoint.getSignature());
    }
}

0 个答案:

没有答案