Spring AOP:可以访问参数名称


问题内容

我正在使用Spring 3.x,Java 6。

我有一个@Around方面,具有以下连接点:

@Around("execution(public * my.service.*.*Connector.*(..))")

因此,我基本上有兴趣拦截所有以“ Connector”结尾的类的公共方法的调用。到目前为止,一切都很好。

现在,就我而言,我想访问方法的实际参数名称:

public doStuff(String myarg, Long anotherArg)

myarganotherArg

我了解使用:

CodeSignature signature = (CodeSignature)jointPoint.getSignature();
return signature.getParameterNames();

仅在我使用“ -g ”标志编译代码(完全调试)并且我宁愿不这样做的情况下才有效。

还有其他方法可以访问这种运行时信息。

谢谢L


问题答案:

不幸的是,您不能做到这一点:-(。这是JVM /字节码的一个众所周知的限制-参数名不能使用反射来获取,因为它们并不总是存储在字节码中(与方法/类名相反) 。

作为一种变通办法,一些框架/规范在诸如WebParamnameproperty)或PathParam。之类的参数上引入了自定义注释。

目前,没有注释就可以得到的是一个值数组。