Luc*_*sio 7 java spring spring-aop
我正在使用Spring 3.x,Java 6.
我有一个带有以下连接点的@Around方面:
@Around("execution(public * my.service.*.*Connector.*(..))")
Run Code Online (Sandbox Code Playgroud)
因此,我基本上对拦截所有对类的公共方法的调用感兴趣,类名以"Connector"结尾.到现在为止还挺好.
现在,在我的方面,我想访问方法的实际参数名称:
public doStuff(String myarg, Long anotherArg)
Run Code Online (Sandbox Code Playgroud)
myarg和另一个Arg
我明白使用:
CodeSignature signature = (CodeSignature)jointPoint.getSignature();
return signature.getParameterNames();
Run Code Online (Sandbox Code Playgroud)
将实际工作,但只有我用" -g "标志(完全调试)编译代码,我宁愿不这样做.
有没有其他方法可以访问这种运行时信息.
谢谢L
检查 的实现org.springframework.core.ParameterNameDiscoverer。
如果未设置,则 spring 使用的注释@RequestParam会检查参数名称value。因此@RequestParam String foo实际上会获取名为“foo”的请求参数。它使用该ParameterNameDiscoverer机制。我只是不确定使用了哪些实现,请尝试每个实现。
读取LocalVariableTableParameterNameDiscoverer并.class使用 asm 检查名称。
所以,这是可能的。但请确保缓存此信息(例如 - 将参数名称存储在映射中,其中键 = 类+方法+参数索引)。
但是,正如文档中所述,您需要调试信息。来自以下文档@PathVariable:
只有在启用调试的情况下编译代码时,才能将方法参数名称与 URI 模板变量名称进行匹配。如果未启用调试,则必须在 @PathVariable 注释中指定 URI 模板变量名的名称,以便将变量名的解析值绑定到方法参数
因此,如果您确实不想包含该信息,Tomasz Nurkiewicz 的答案解释了解决方法。
| 归档时间: |
|
| 查看次数: |
9523 次 |
| 最近记录: |