在aspectj的方法中推断参数的类型

时间:2015-07-30 10:48:04

标签: java reflection guava aspectj aop

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

Object[] args=joinPoint.getArgs();

但JoinPoint类是否为我们提供了推断参数类型的任何功能?例如:

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

我得到的只是Object个实例。有没有办法使用joinpoint属性或反射或Guava TypeToken来推断该参数的类型?

1 个答案:

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