方法变量上的AspectJ切入点,是否可能?

时间:2010-12-20 16:14:44

标签: java variables methods aspectj pointcut

我一直在使用AspectJ,它在包含注释的对象范围字段上运行良好。我刚遇到一种情况,我想要注释一个方法范围的变量,它将与我的切入点一起工作,但我遇到了麻烦。

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

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

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

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

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:1)

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

我似乎记得最近关于可能很快添加的此类功能的讨论,但我无法在AspectJ issue trackerMailing List archives

中找到它