在方法变量上的pointcut,是否有可能?
题
我已经使用了一段时间了,它在包含注释的对象范围字段上效果很好。我只是遇到了一个我想注释一个方法范围的情况,该变量将与我的点缩一起使用,但我遇到了麻烦。
这是我正在使用的点数。如果我的变量是对象的字段,则可以正常工作,但是如果我将范围减少到方法(在方法内声明),则它不再起作用,我不确定为什么。让我知道我能做什么,谢谢。
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应该使用的目的。
作为解决方案,您可以将相关功能提取到单独的方法中,然后将您的方面应用于该方法,也可以使用周围的建议将整个方法替换为该局部变量。
在您的特定示例中,更重要的是,可以将点键应用于给定方法范围内的构造函数执行,因此您实际上可以执行相同的操作而无需绑定到本地变量。
不隶属于 StackOverflow