spring - 对 Spring GenericBeanDefinition 的引用

标签 spring spring-mvc

我正在尝试以编程方式定义我的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/

相关文章:

java - 如何在Spring Boot中使用抽象类?

spring - 使用 STS 创建新的 Web 应用程序项目时找不到 Spring MVC 项目?

java - 多个项目中的实体

java - 升级到 Spring 4.2 后 ContentNegotiatingViewResolver MediaTypes 错误

java - jquery 与 spring mvc 在 java 中

java - 替换 jdbc.support.nativejdbc 在 Spring 5 中删除

java - Bean 未注入(inject) jUnit 测试

java - 使用 Spring Boot 映射 html 资源

java - Spring:将带有数据的对象从 Controller 传递到jsp,并从Spring Form提交中获取预先保存的数据

java - 带有额外信息的 Bean 验证