推断aspectj方法中参数的类型



在AOP中(使用Aspectj)截取方法调用并访问其参数,我们可以使用

Object[] args=joinPoint.getArgs();

但是JoinPoint类给了我们任何特性来推断参数的类型吗?例如:

public void setApples(List<Apple>){..}

我得到的是一个Object实例。是否有一些方法可以使用joinpoint属性或反射或Guava TypeToken来推断该参数的类型?

如果参数不为空,您可以使用instanceof检查类型,如@Babur在他的评论中所写,或检查其Class,当它不为空:

Object[] args = joinPoints.getArgs();
if (args[0] instanceof String) {
    System.out.println("First arg is a String of length " + ((String) args[0]).length());
}
if (args[1] == null) {
    System.out.println("Second arg is null");
} else {
    System.out.println("Second arg is a " + args[1].getClass());
}

如果您确实需要分析方法的参数,您可以将jointPoint.getSignature()强制转换为MethodSignature以访问Method:

if (joinPoint.getSignature() instanceof MethodSignature) {
    Method method = ((MethodSignature) jointPoint.getSignature()).getMethod();
    System.out.println("Method parameters: " + Arrays.toString(method.getParameterTypes()));
}

相关内容

  • 没有找到相关文章

最新更新