我有一个bean工厂类如下:
public class BeanFactory {
public static BeanInterface getInstance(int id) {
return new Bean(id);
}
}
我想在spring容器中使用这个类来获取Instrument类的实例,并在applicationcontext.xml
中添加了一个bean条目,如下所示:
<bean id="TestBean" class="com.test.beans.BeanFactory" factory-method="getInstance">
</bean>
但是我无法通过任何方式将id传递给getInstance
工厂方法。
有什么办法可以将参数传递给这个工厂方法吗?
编辑:将bean工厂视为scope =“prototype”。我希望基于ID值的新TestBean
实例。
答案 0 :(得分:1)
完整的解决方案是:
Bean Entry:
<bean id="TestBean" class="com.test.beans.BeanFactory" factory-method="getInstance" abstract="false" singleton="false" >
</bean>
在代码中获取bean:
TestBeanInterface visitingLocation = (TestBeanInterface) ctx.getBean("TestBean",42); //passing the argument for static method
答案 1 :(得分:0)
您可以使用<constructor-arg>
元素将参数传递给工厂方法:
<bean id="TestBean" class="com.test.beans.BeanFactory" factory-method="getInstance">
<constructor-arg value = "42" />
</bean>
答案 2 :(得分:0)
规则与普通的Spring构造函数相同,即你可以使用<contructor-arg value="..."/>
通过提供静态工厂方法的参数 元素,与构造函数完全相同 实际上已被使用。由...返回的类的类型 factory方法不必与类相同 包含静态工厂方法,尽管在这个例子中它是。一个 实例(非静态)工厂方法将在本质上使用 相同的方式(除了使用factory-bean属性 而不是类属性),因此不会讨论细节 这里。
答案 3 :(得分:0)
您可以将类实例(另一个bean)作为参数传递。
<bean id="TestBean" class="com.test.beans.BeanFactory" factory-method="getInstance">
<property name="beanBuilder" ref="BeanBuilder"/>
</bean>
<bean id="BeanBuilder" class="com.test.beans.SelectedBeanBuilder"/>