1

我正在尝试以编程方式定义我的 bean。我有 1 个 DAO bean,由 2 个其他服务 bean 使用。DAO bean 作为构造函数参数注入。

如何获得对 DAO bean 的引用来构建服务 bean(类似于 <bean ref="myDAO"/>)?

我的 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”持有者在其他定义中注入两次?

请注意,我不能使用注释。

提前致谢。

4

1 回答 1

1

发现,只需使用:

Object myDAORef = new RuntimeBeanReference("myDAO");

并将其作为构造函数参数注入。

于 2013-06-06T15:50:59.287 回答