加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Spring:使用工厂bean创建任意数量的bean

发布时间:2020-12-15 02:33:44 所属栏目:Java 来源:网络整理
导读:我有一个factory-ish bean,它在启动时创建了许多对象,我希望这些对象本身就是 Spring bean. 如果我正在创建单个对象,我可以使用工厂方法进行实例化,例如. (摘自Spring docs 4.3.2.3节): !-- the factory bean,which contains a method called createInstanc
我有一个factory-ish bean,它在启动时创建了许多对象,我希望这些对象本身就是 Spring bean.

如果我正在创建单个对象,我可以使用工厂方法进行实例化,例如. (摘自Spring docs 4.3.2.3节):

<!-- the factory bean,which contains a method called createInstance() -->
<bean id="serviceLocator" class="examples.DefaultServiceLocator">
  <!-- inject any dependencies required by this locator bean -->
</bean>

<!-- the bean to be created via the factory bean -->
<bean id="clientService"
      factory-bean="serviceLocator"
      factory-method="createClientServiceInstance"/>

如果我提前知道我有n个对象,我可以调用n种不同的方法,但我不这样做 – 我的工厂创建了一个未知的任意数量的对象.

有谁知道如何做到这一点?

他们的目标是让他们像上面那样“适当”的春豆会产生;具体而言,他们应该有资格作为来源和目标进行自动装配.注意这意味着我不仅仅想要返回一个Collection并将其作为bean.

我正在使用XML配置的Spring 3.1.

解决方法

好像你需要动态bean创建……

从未尝试过,但如this question所述,您可以尝试使用BeanDefinitionBuilder.似乎它拥有您所需要的一切.从工厂bean中使用它(现在不需要将其定义为工厂bean).

编辑:我找到了一个很好的用法示例here.

就像是:

String className = ... // get class name from wherever you get it

// Build your dynamic bean:
BeanDefinitionBuilder bdb = BeanDefinitionBuilder.genericBeanDefinition(className);
bdb.setSingleton(true);
// add dependencies:
bdb.addDependsOn(dependeeBeanName);
// Eventually - validate it and get it:
AbstractBeanDefinitionb bean = db.getBeanDefinition();

// I guess only now you get other already existing beans
// and make them depend on the one you created in the same way

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读