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
接口。
添加回答
舉報