在周围的服务中,如何获得'类型参数'建议方法的参数

时间:2014-04-22 06:13:34

标签: java spring reflection spring-aop type-parameter

使用Spring AOP,我正在编写一个带有周围建议的Aspect,它可以截取任何使用@MyAnnotation注释的方法。假设截获的方法声明如下,

@MyAnnotation
public String someMethod(ArrayList<Integer> arrList) {...}

在通知方法中,我想知道第一个参数(即arrList)的类型ArrayList的类型参数为Integer

我尝试过这样做this question

@Around("@annotation(MyAnnotation)")
public Object advice(ProceedingJoinPoint pjp) {
    Method method = ((MethodSignature) pjp.getSignature()).getMethod();
    Class<?>[] paramsClass = method.getParameterTypes();
    logger.info(((ParameterizedType) paramsClass[0].getGenericSuperclass()).getActualTypeArguments()[0])
    ...
}

但注销的只是E。我该怎么做才能打印java.lang.Integer

1 个答案:

答案 0 :(得分:1)

试试这个:

@Around("@annotation(MyAnnotation)")
public Object advice(ProceedingJoinPoint pjp) throws Throwable {
    Method method = ((MethodSignature) pjp.getSignature()).getMethod();
    Type[] genericParamsClass = method.getGenericParameterTypes();

    logger.info(((ParameterizedType) genericParamsClass[0]).getActualTypeArguments()[0]);
    ...
}