2 回答
TA贡献1825条经验 获得超4个赞
一种可能的解决方案是实现 BeanPostProcessor。您可以在 bean 初始化之前访问底层类。
这里的例子:
@Component
public class ParametrizedBeanFactoryPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
// bean is your actual class
try {
if ("myBean".equals(beanName)) {
ParameterizedType pt = (ParameterizedType) bean
.getClass()
.getMethod("doFoo", List.class)
.getGenericParameterTypes()[0];
Class<?> listOfX = (Class<?>) pt.getActualTypeArguments()[0];
System.out.println(listOfX); //class java.lang.Integer
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
// bean is proxy object
return bean;
}
}
TA贡献1911条经验 获得超7个赞
看起来下面的代码在我的特定情况下可以找到底层的真实类:
if (myBean instanceof org.springframework.aop.framework.Advised) { Class<?> realClass = ((Advised)r).getTargetClass(); }
从那里我可以使用标准反射。但我不确定这个解决方案是否合理,或者我是否可以期望所有 Spring bean 都实现该Advised
接口。
添加回答
举报