我目前正在使用JoinPoint捕获运行时传递给服务方法的参数。尽管JoinPoint可以帮助我检索参数值,但我发现当传递的参数是数组时,它没有提供任何好的API来检索参数名称,参数类型,单个参数值。
这是一个例子:
public void doIt(String user, Attribute[] attr, Integer[] i, boolean bool, List<Attribute> list){.....}
对于上述方法,当我使用JoinPoint.getArgs()时,我看到参数的垃圾值是数组或集合。如果参数是数组或集合,如何验证它们是否是其中之一,以及如何遍历它们以检索单个值?
有什么建议么 ?
谢谢
最佳答案
这应该工作:
MethodSignature signature = (MethodSignature)joinPoint.getSignature();
String[] parameterNames = signature.getParameterNames();
Object[] parameterValues = joinPoint.getArgs();
parameterNames应该与您传入的内容匹配。
更新1:您可能正在使用关闭的调试符号进行编译-(显式传递javac -g:none,或通过maven/ant中的标志传递)。关闭调试符号后,名称将不可用,并且将由编译器替换为args1等。尝试使用未明确关闭调试符号的编译。
关于AspectJ JoinPoint问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5720494/