使用AspectJ设置带注释的方法参数的值

时间:2014-02-26 15:48:12

标签: java aspectj

我想象一个方法

public void fooMethod(Object param1, @SetupParam Object param2){
    // ... do stuff
}

我想打电话而不需要设置param2

fooMethod("param1");

但在建议中神奇地设置它。 我目前正在使用此代码(简化)

@Around("@annotation(com.example.SetupParam)")
public Object setupParam(ProceedingJoinPoint pjp) throws Throwable {
    Object[] args = pjp.getArgs();
    args[1] = "setup";
    return pjp.proceed(args);
}

但我每次都需要用

调用该方法
fooMethod("param1", null);

所以我想摆脱null参数。我没有使用@Autowiring,因为方法中的第二个参数总是用不同的值实例化。

1 个答案:

答案 0 :(得分:0)

我认为你的切入点定义是错误的。你需要的是带有注释的@args定义。这匹配其参数使用已定义的注释进行注释的方法(如您所述),您的建议看起来应该类似(尚未测试)

@Around("@args(.., com.example.SetupParam))")

请注意..表示任意类型的任意数量的参数。

不幸的是,@args支持at most one .. wildcard,所以只要你决定在你的参数列表的开头或结尾都有这些带注释的参数,你应该没问题。