java - AspectJ Weaver setter 模式问题

标签 java aspectj setter

我有一个“工作”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/

相关文章:

java - 在java中设置和获取方法?

javascript - 为无父本地变量 : impossible? 定义 Setter/Getter

java - 使用 Java 获取 URL

java - LuaJava:使用 LuaJava 将整个 Lua-Table 导入类 Java 数组

eclipse - 快速插入重构.aj文件中大量Spring Roo生成的方法

java - spectj 不拦截类被注释的构造函数

java - toCharArray()方法显示错误

java - JMX : rmiPort and registryPort the same?

java - AspectJ - 使用反射实例化非公共(public)类的对象

c++ - "Value Validation in Getter/Setter"是好的样式吗?