java - Spring AOP : get access to argument names

标签 java spring spring-aop

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

我有一个带有以下连接点的@Around 切面:

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

所以,我基本上感兴趣的是拦截所有对类名以“Connector”结尾的类的公共(public)方法的调用。到目前为止一切顺利。

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

public doStuff(String myarg, Long anotherArg)

myarganotherArg

我理解使用:

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/

相关文章:

带有外部 .jar 的 Java 命令行

java - 在 firebase 中创建异常

java - BeanIO DoubleTypeHandler 模式

java - Spring 中带有 url 模式重定向的上下文路径

Spring AOP 和 apache shiro 配置。注释未扫描

Java - 音效不播放

spring - 真的有必要将 Hystrix 与响应式(Reactive) spring boot 2 应用程序一起使用吗?

java - java 文件中的 hibernate.cfg.xml 替代方案

java - 为 Spring JPA 存储库方法配置切入点

java - Spring AOP 表达式中的多个返回类型