我已经使用了一段时间了,它在包含注释的对象范围字段上效果很好。我只是遇到了一个我想注释一个方法范围的情况,该变量将与我的点缩一起使用,但我遇到了麻烦。

这是我正在使用的点数。如果我的变量是对象的字段,则可以正常工作,但是如果我将范围减少到方法(在方法内声明),则它不再起作用,我不确定为什么。让我知道我能做什么,谢谢。

 after(final Trigger trigger): set(@Triggereable * *) && args(trigger)
 {
  System.out.println("trigger flush");
 }

另外,这是我想起作用的外观。实例化触发器时,上面的System.out.println应发射:

public void foo()
{
   @Triggereable
   private Trigger trigger = new Trigger();
}
有帮助吗?

解决方案

axpectj当前不支持本地变量的点尺(阅读 常见问题解答).

我似乎回想起最近关于此功能可能很快添加的讨论,但我找不到它 expectj问题跟踪器 也不在 邮件列表档案

其他提示

如果您遇到这种情况,您可能会尝试更改实施,而不是应用实际的交叉切割问题。基本上,这不是AOP和appectj应该使用的目的。

作为解决方案,您可以将相关功能提取到单独的方法中,然后将您的方面应用于该方法,也可以使用周围的建议将整个方法替换为该局部变量。

在您的特定示例中,更重要的是,可以将点键应用于给定方法范围内的构造函数执行,因此您实际上可以执行相同的操作而无需绑定到本地变量。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top