假设我有这个方法:
public void exampleMethod(String myString, Integer myInteger, Object myObject){}
如果我有一个方面 @Around
,并且我调用了 ProceedingJoinPoint.getArgs()
,它是否总是返回一个按签名顺序排序的数组?像这样?
public void aspectMethod(final ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
Object[] args = proceedingJoinPoint.getArgs();
args[0]; // String myString?
args[1]; // Integer myInteger?
args[2]; // Object myObject?
}
它似乎确实是确定性的,至少在我经历过这种情况的 10 次左右是这样。 I can't find anything in the javadocs to say either way .
最佳答案
它总是有序的。知道您甚至可以创建一个映射,其中键是参数名称,值是参数值。顺序总是一样的
String[] keys = ((MethodSignature) jp.getSignature()).getParameterNames();
Object[] values = jp.getArgs();
Map<String, Object> params = new HashMap<>();
IntStream.range(0, keys.length).boxed().forEach(i -> params.put(keys[i], values[i]));
关于java - JoinPoint.getArgs() 是有序的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50147340/