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。但是如何注释第二个参数,因为它可能并不总是第二个,所以参数列表可能会有所不同