我需要能够找到 Spring bean 上方法参数的参数化类型。
我正在使用 Spring Boot 2.0.1。
我有一个 Spring bean,如下所示:
public class MyBean {
public void doFoo(List<Integer> param) {...}
}
我需要能够找出参数的参数化类型param。通常我可以这样做:
MyBean myBean = getMyBean();
ParameterizedType pt = (ParameterizedType)myBean
.getClass()
.getMethod("doFoo", List.class)
.getGenericParameterTypes()[0];
Class<?> listOfX = (Class<?>)pt.getActualTypeArguments()[0];
但是,当针对 Spring bean 执行此操作时,该getGenericParameterTypes()方法始终返回对象数组Class而不是对象数组Type。
原因是 Spring 广泛使用 CGLIB 来提供类的运行时重新编译以支持 AOP。因此,我没有获取 的实例MyBean,而是获取 的实例MyBean$$EnhancerBySpringCGLIB$$xxxxxxxx,并且“重新编译”的类丢失了所有泛型信息(显然是因为 CGLIB 是在泛型存在之前编写的,并且不再受到积极支持?)。
如果仅提供 Spring bean 实例,我可以使用一些想法来了解如何获取此参数的参数化信息。MyBean.class我一直在尝试寻找从那里访问的方法,MyBean$$EnhancerBySpringCGLIB$$xxxxxxxx并从那里找到我可以使用反射的真正方法。但我还没有找到解决办法。我正在不惜Class.forName(...)一切代价试图避免。
凤凰求蛊
Smart猫小萌
相关分类