LoggingAspect.java
@Around("allGenericAppServiceImplMethods()")
public Object LoggingAdvice(ProceedingJoinPoint joinPoint)throws Throwable{
MethodSignature signature = (MethodSignature)joinPoint.getSignature();
String[] parameterNames = signature.getParameterNames();
Object[] arguments = joinPoint.getArgs();
我将parameterNames视为null。如何获取parameterNames?
答案 0 :(得分:1)
我只是在简单的AspectJ中检查过,并且我从未使用AspectJ 1.8.6获得null
的参数名称。也许你使用的是旧版本,需要升级到当前版本(1.8.9)。如果使用相应的调试信息编译了相关的类文件,则会正确显示参数名称。但即使调试信息被剥离或者您正在访问JDK方法的参数名称,至少AspectJ会吐出arg0
,arg1
等名称。
更新:纯粹的AspectJ或Spring应用程序中使用的AspectJ LTW中不存在此问题,仅在具有JDK动态代理的基于代理的Spring AOP中存在。我可以通过GitHub上的某个地方克隆一个小样本项目来重现这个问题。
如果您是针对接口进行编程的解决方案是强制使用代理的CGLIB用法,即使这里的默认值是JDK代理。
所以如果您的配置看起来像这样......
<aop:aspectj-autoproxy/>
...只需将其更改为:
<aop:aspectj-autoproxy/>
<aop:config proxy-target-class="true">
<!-- other beans defined here... -->
</aop:config>
然后再试一次,享受吧。 : - )