我正在尝试以编程方式定义我的bean。我有 1 个 DAO bean,由另外 2 个服务 bean 使用。 DAO bean 作为构造函数参数注入(inject)。
如何获取对 DAO bean 的引用来构建服务 bean(类似于
我的 DAO 定义为(使用 DefaultListableBeanFactory beanFactory):
final GenericBeanDefinition myDAODefinition = new GenericBeanDefinition();
myDAODefinition.setBeanClassName("com.xxx.dao");
final BeanDefinitionHolder myDAOHolder = new BeanDefinitionHolder(myDAODefinition,"myDAO");
BeanDefinitionReaderUtils.registerBeanDefinition(myDAOHolder, beanFactory);
然后我的服务bean:
final GenericBeanDefinition srv1Definition = new GenericBeanDefinition();
srv1Definition.setBeanClassName("com.xxx.service1");
srv1Definition.setConstructorArgumentValues(new ConstructorArgumentValues() {
{
addGenericArgumentValue(*** ref to "myDAO" holder ***);
}
});
final BeanDefinitionHolder srv1Holder = new BeanDefinitionHolder(srv2Definition, "srv1");
和:
final GenericBeanDefinition srv2Definition = new GenericBeanDefinition();
srv2Definition.setBeanClassName("com.xxx.service2");
srv2Definition.setConstructorArgumentValues(new ConstructorArgumentValues() {
{
addGenericArgumentValue(*** ref to "myDAO" holder ***);
}
});
final BeanDefinitionHolder srv2Holder = new BeanDefinitionHolder(srv2Definition, "srv2");
如何引用“myDAO”持有者在其他定义中注入(inject)两次?
请注意,我无法使用注释。
提前致谢。
最佳答案
发现了,只需使用:
Object myDAORef = new RuntimeBeanReference("myDAO");
并将其作为构造函数参数注入(inject)。
关于spring - 对 Spring GenericBeanDefinition 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16960127/