5

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

这是我正在使用的切入点。如果我的变量是对象的字段,它可以正常工作,但是如果我将范围缩小到方法(在方法内声明的变量),那么它就不再起作用了,我不知道为什么。让我知道我能做什么,谢谢。

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

另外,这是我想要工作的一个例子。上面的 System.out.println 应该在 Trigger 被实例化时触发:

public void foo()
{
   @Triggereable
   private Trigger trigger = new Trigger();
}
4

2 回答 2

5

如果您遇到这种情况,您可能会尝试更改实现而不是应用实际的横切关注点。基本上,这不是 AOP 和 AspectJ 的用途。

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

此外,在您的特定示例中,切入点可以应用于给定方法范围内的构造函数执行,因此您实际上可以在不绑定到局部变量的情况下执行相同的操作。

于 2010-12-20T16:35:42.757 回答
1

AspectJ 目前不支持局部变量的切入点(阅读FAQ 条目)。

我似乎记得最近关于可能很快添加的此类功能的讨论,但我在AspectJ 问题跟踪器邮件列表档案中找不到它

于 2010-12-20T16:56:45.960 回答