如何在AspectJ中将方法与带注释的参数进行匹配

时间:2011-08-26 13:58:02

标签: java methods annotations aspectj aop

我想匹配这样的方法:

@Foo
public void boo(@Baz Bar bar) { ... }

基本上:

  • 该方法有一个@Foo注释(我与execution(@Foo * *(..)) && @annotation(foo)匹配),
  • 可以有不同数量的参数,
  • 其中一个应该有@Baz注释,
  • 我需要进一步使用带注释的参数(bar)。

如果方法有@Foo注释但缺少@Baz注释,我希望尽可能早地得到错误,如果可能的话在编织时而不是在运行时。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

public pointcut annArg(): execution(@Foo * *(.., @Baz (*),..));

declare error :execution(@Foo * *(..))&&!annArg() :"error";

不幸的是,用args(..,arg,..)来获取匹配的参数是不可能的。但是您可以使用thisJoinPoint.getArgs()和反射API来获取带注释的参数。或者,如果你知道参数的位置,你可以使用像args(..,arg);

这样的东西