我正在尝试以编程方式定义我的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”持有人在其他定义中注入两次?
请注意,我无法使用注释。
提前致谢。
答案 0 :(得分:1)
发现,只需使用:
Object myDAORef = new RuntimeBeanReference("myDAO");
并将其作为构造函数参数注入。