Java 方法变量上的AspectJ切入点,可能吗?

Java 方法变量上的AspectJ切入点,可能吗?,java,variables,methods,aspectj,pointcut,Java,Variables,Methods,Aspectj,Pointcut,我已经使用AspectJ一段时间了,它在包含注释的对象范围字段上非常有效。我刚刚遇到一种情况,我想注释一个方法范围的变量,该变量将与我的切入点一起工作,但我遇到了麻烦 这是我正在使用的切入点。如果我的变量是对象的一个字段,它就可以正常工作,但是如果我将范围缩小到一个方法(在方法中声明的变量),那么它就不再工作了,我不知道为什么。让我知道我能做什么,谢谢 after(final Trigger trigger): set(@Triggereable * *) && args(tr

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

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

 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();
}

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

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


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

AspectJ当前不支持局部变量上的切入点(请阅读)


我似乎记得最近关于可能很快添加的此类功能的讨论,但我在中找不到它,也没有在

中找到它。我确实觉得很有趣,我在方法变量实例化上使用了切入点,但我觉得它仍然是交叉关注的一部分。有大约10行样板代码可以跨多个类复制,而不需要方面。但是在AspectJ中这是不可能的吗?