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

Java 使用AspectJ设置带注释的方法参数的值,java,aspectj,Java,Aspectj,我想象一种方法 public void fooMethod(Object param1, @SetupParam Object param2){ // ... do stuff } 我想在不需要设置param2的情况下调用它 fooMethod("param1"); 但是在一个建议中神奇地设置它。 我目前正在使用这段代码 @Around("@annotation(com.example.SetupParam)") public Object setupParam(Proceeding

我想象一种方法

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,因为方法中的第二个参数总是用不同的值实例化。

我认为您的切入点定义是错误的。您需要的是@args定义,其中包含注释。这与方法相匹配,这些方法的参数使用定义的注释进行了注释,正如您在问题中所描述的,您的建议应该与您没有测试过的方法类似

@Around("@args(.., com.example.SetupParam))")
注意。。表示任何类型的任意数量的参数


不幸的是,@args支持,因此只要您决定在参数列表的开始或结束处使用这些带注释的参数,您就可以了。

向类中添加一个方法public void foodmethodobject param1{foodmethodparam1,null;},您就可以调用foodmethodparam1。但是如何注释第二个参数,因为它可能并不总是第二个,所以参数列表可能会有所不同