在AOP(使用Aspectj)拦截方法调用并访问其参数我们可以使用
Object[] args=joinPoint.getArgs();
但JoinPoint类是否为我们提供了推断参数类型的任何功能?例如:
public void setApples(List<Apple>){..}
我得到的只是Object
个实例。有没有办法使用joinpoint
属性或反射或Guava TypeToken
来推断该参数的类型?
答案 0 :(得分:1)
如果参数不为null,您可以使用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()));
}