我创建了一个名为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)
,但我正在寻找比这更好的东西。
答案 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都会返回一个新实例。
的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"/>