【发布时间】:2022-07-28 18:58:58
【问题描述】:
我需要以编程方式为 spring 数据创建一个 spring bean。它管理一个只在运行时知道的泛型类。 这是我的存储库定义:
@Component
public interface GeneratorRepository<P extends MyType>
extends Repository<P, Long>
这就是我创建 bean 的方式:
@Autowired
DefaultListableBeanFactory springContextBeanFactory;
RootBeanDefinition beanDefinition = new RootBeanDefinition(GeneratorRepository.class);
beanDefinition.setTargetType(
ResolvableType.forClassWithGenerics(GeneratorRepository.class, aMyTypeClassImpl));
springContextBeanFactory.registerBeanDefinition(
aMyTypeClassImpl.getSimpleName() + GeneratorRepository.class.getSimpleName(), beanDefinition);
之后,我可以使用类似这样的方式获取 bean 名称:
String[] name = springContextBeanFactory.getBeanNamesForType(
ResolvableType.forClassWithGenerics(GeneratorRepository.class, aMyTypeClassImpl));
我得到了刚刚创建的 bean 的名称。但是我在做的时候得到 BeanCreationException :
springContextBeanFactory.getBean(beanNamesForType[0])
带有消息: 无法实例化 [com.my.project.generator.GeneratorRepository]:指定的类是一个接口
问题是:是否可以以编程方式为具有泛型的接口创建 bean 并使用它来获取对象?
感谢您的阅读和任何帮助!
【问题讨论】: