gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:42:50 24 4
gpt4 key购买 nike

我有一个类似工厂的 bean,它在启动时创建了许多对象,我希望这些对象本身就是 Spring bean。

如果我正在创建单个对象,我可以使用工厂方法进行实例化,例如。 (来自 Spring 文档第 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 个不同的方法,但我不知道 - 我的工厂创建了任意数量的事先不知道的对象。

有人知道怎么做吗?

目标是让它们成为像上面那样生成的“合适的”Spring bean;具体来说,它们应该有资格作为源和目标进行 Autowiring 。请注意,这意味着我不只是想返回一个 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

关于java - Spring:使用工厂 bean 创建任意数量的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10342463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com