【问题标题】:Spring: Creating an arbitrary number of beans using a factory beanSpring:使用工厂 bean 创建任意数量的 bean
【发布时间】:2012-04-27 07:26:26
【问题描述】:

我有一个工厂式 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;具体来说,它们应该有资格作为源和目标进行自动装配。请注意,这意味着我不只是想返回一个 Collection 并让它成为 bean。

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

【问题讨论】:

    标签: java spring


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      相关资源
      最近更新 更多