使用Spring AOP,我正在编写一个带有around建议的方面,该方面拦截任何用@MyAnnotation
注释的方法。假设截获的方法声明如下,
@MyAnnotation
public String someMethod(ArrayList<Integer> arrList) {...}
在建议方法中,我想得到第一个参数,即arrList
,具有类型ArrayList
和类型参数Integer
的信息。
我试着通过做这个来回答这个问题
@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
?
试试这个:
@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]);
...
}