引用Spring GenericBeanDefinition

时间:2013-06-06 10:46:28

标签: spring spring-mvc

我正在尝试以编程方式定义我的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”持有人在其他定义中注入两次?

请注意,我无法使用注释。

提前致谢。

1 个答案:

答案 0 :(得分:1)

发现,只需使用:

Object myDAORef = new RuntimeBeanReference("myDAO");

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