2014-02-26 13 views
0

我想象的方法中使用AspectJ进行设置

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

那我想无需不必设置参数2

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); 

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

+0

向类中添加一个'public void fooMethod(Object param1){fooMethod(param1,null);}'方法,您可以调用fooMethod(“param1”)。 – sheltem

+0

但是如何注释第二个参数,因为它可能并不总是第二个参数,参数列表可能会有所不同 – MatthiasLaug

回答

0

我认为您的切入点定义是错误的。你需要的是带有注释的@args定义。这符合其参数(如你在问题中所述)与定义注解你的建议应该类似于(没有测试),以

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

注意到..意味着任何数量的任何类型的参数的方法。

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