我想匹配这样的方法:
@Foo
public void boo(@Baz Bar bar) { ... }
基本上:
@Foo
注释(我与execution(@Foo * *(..)) && @annotation(foo)
匹配),@Baz
注释,bar
)。如果方法有@Foo注释但缺少@Baz
注释,我希望尽可能早地得到错误,如果可能的话在编织时而不是在运行时。
我该怎么做?
答案 0 :(得分:2)
public pointcut annArg(): execution(@Foo * *(.., @Baz (*),..));
declare error :execution(@Foo * *(..))&&!annArg() :"error";
不幸的是,用args(..,arg,..)来获取匹配的参数是不可能的。但是您可以使用thisJoinPoint.getArgs()和反射API来获取带注释的参数。或者,如果你知道参数的位置,你可以使用像args(..,arg);
这样的东西