我有一个“工作”AspectJ Weaver 模式,用于匹配特定类型(项目)内的所有 setter :
public pointcut setter(Item item) :
target(item)
&& execution(void Item+.set*(*));
它对所有潜在的 setter 都有效,但它也匹配名称为“setup”、需要一个参数的方法。
所以我现在的解决方案是检查拦截所有 setter 的方法,如果第四个字符是否为小写(基于 thisJoinPoint.getSignature().getName()),并基于此不再继续代码。
但是有没有更好的方法来排除“set”后面有小写字符的所有方法?据我所知,正则表达式不是 AspectJ 模式的一部分,对吗?
最佳答案
我不知道这是否不那么难看,但是您可以引入一个注释 @NoSetter 并在另一个pointcut noSetter
中使用它来排除诸如 之类的方法>setup(...)
您不希望应用方面的地方:
public pointcut noSetter(Item item) :
target(item)
&& execution(void @NoSetter Item+.*(..));
修改切入点setter
如下:
public pointcut setter(Item item) :
target(item)
&& execution(void Item+.set*(*))
&& !noSetter();
我在需要 setter 方法来触发特定事件的情况下使用了这种方法。我们无法生成代码,并且手动执行此操作过于乏味且容易出错。此外,在某些 setter 上,该事件根本不会被明确触发。
[上述语法未经测试,目前没有 IDE 来验证这一点]
关于java - AspectJ Weaver setter 模式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8232727/