java - JoinPoint.getArgs() 是有序的吗?

标签 java aspectj spring-aop

假设我有这个方法:

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/

相关文章:

java - 如何使 Java 代码通用以处理不同类型的 POJOS 并向其中添加数据?

java - 在 Java/Android 中处理多个不同异步结果的惯用方法

eclipse - 调试、单步执行 AspectJ 编织类方法

java - 切入点表达式 'abc(inString)' 包含不受支持的切入点原语 'call'

java - 使用 CGLIB/Spring AOP 时如何防止误报空指针警告?

java - Android 版 Youtube API - 创建多个缩略图

java - 如何根据提供的 HTML 从弹出窗口中定位元素?

java - 没有 @EnableAspectJAutoProxy,Spring AOP 能工作吗?

java - AspectJ、SpringAOP、Aspect 运行两次

aspectj - Spring AOP : @AfterThrowing execution pointcut never matches