在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()));
}