我正在使用 Spring 3.x、Java 6。
我有一个带有以下连接点的@Around 切面:
@Around("execution(public * my.service.*.*Connector.*(..))")
所以,我基本上感兴趣的是拦截所有对类名以“Connector”结尾的类的公共(public)方法的调用。到目前为止一切顺利。
现在,就我而言,我想访问方法的实际参数名称:
public doStuff(String myarg, Long anotherArg)
myarg 和 anotherArg
我理解使用:
CodeSignature signature = (CodeSignature)jointPoint.getSignature();
return signature.getParameterNames();
将实际工作,但前提是我使用“-g”标志(完全调试)编译代码,我宁愿不这样做。
有没有其他方法可以访问那种运行时信息。
谢谢 大号
最佳答案
不幸的是,你不能这样做:-(。这是 JVM/字节码的一个众所周知的限制——不能使用反射获取参数名称,因为它们并不总是存储在字节码中(与方法相反/类名)。
作为解决方法,一些框架/规范在参数上引入了自定义注释,例如 WebParam
(名称
属性)或 PathParam
.
目前,如果没有注释,您所能得到的只是一个值数组。
关于java - Spring AOP : get access to argument names,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5030638/