在单件工厂获得新原型

时间:2012-02-03 10:55:41

标签: java spring singleton prototype factory

我创建了一个名为HelperFactory的类型。它在Spring上下文中就是这样连接的:

<bean id="HelperFactory" class="helper.HelperFactory">
    <property name="createHelper" ref="createHelperBean" />
    <property name="editHelper" ref="editHelperBean" />
    <property name="deleteHelper" ref="deleteHelperBean" />
</bean>

所有引用的bean都是原型。

HelperFactory有一个名为determinteHelper(HelperDto)的方法。此方法应返回相应Helper的新实例。

但由于HelperFactory是单身,所有引用的Helper也只设置一次。每次拨打电话时如何才能获得新的Helper个实例 - 比如说getCreateHelper()


Ther Helper bean在XML上下文中也被声明,并且还有一些其他bean被注入其中。


目前我正在将Bean的名称注入HelperFactory,然后调用getBean(String),但我正在寻找比这更好的东西。

2 个答案:

答案 0 :(得分:1)

以下是我们在项目中的表现:

在工厂类中,提供一个方法:

public Object createObject(){
      return null;
}

在你的bean中执行以下操作:

<bean id="blah" class="blahblah">
    <lookup-method name="createObject" bean="myPrototypeBean"/>
</bean>

这将导致覆盖createObject方法,该方法在调用方法时返回bean。如果bean是原型bean,则每个invokation都会返回一个新实例。

查看Spring Beans

3.3.4.1. Lookup method Injection部分

答案 1 :(得分:0)

从Spring文档中提取:

当使用静态工厂方法定义要创建的bean以及指定包含静态工厂方法的类的class属性时,需要另一个名为factory-method的属性来指定工厂方法本身的名称。 Spring期望能够调用此方法(使用后面描述的可选参数列表)并返回一个活动对象,从该点开始将其视为通过构造函数正常创建。这种bean定义的一个用途是在遗留代码中调用静态工厂。

以下是bean定义的示例,它指定通过调用factory-method创建bean。请注意,该定义未指定返回对象的类型(类),仅指定包含工厂方法的类。在此示例中,createInstance必须是静态方法。

  <bean id="exampleBean"
      class="examples.ExampleBean2"
      factory-method="createInstance"/>