【发布时间】:2011-03-24 22:28:09
【问题描述】:
我正在尝试编写一个方面来监视对各种对象的公共方法的调用,但忽略对 self 的调用。为此,我有这样一个方面:
抽象方面 MonitorPublicMethodCalls { 抽象切入点matchingType(); 切入点matchingCall(): call(public * *(..)); 切入点 notSelf(); 周围的对象(对象 t):matchingType()&&matchingCall()&& notSelf(){ // 对调用做一些有用的事情 if(/* 允许调用?*/) { 返回进行(); } 别的 { throw new IllegalStateException("Badness!"); } } }这将监控对所有公共方法的所有调用,但为了忽略对 self 的调用,我真的很想将 notSelf 定义为类似
pointcut notSelf(Object o): target(o) && !this(o)
但是,为此我得到一个错误:“否定不允许绑定”对this(o) 的否定。现在,作为一种解决方法,我在建议正文中检查目标是否等于此,如果是则绕过其他逻辑,但这意味着该方面被编织到比实际需要更多的地方。是否可以定义一个约束来避免调用 self?
【问题讨论】: