Spring:根据参数获取bean

时间:2013-01-15 08:36:16

标签: spring dependency-injection

我有一个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实例。

4 个答案:

答案 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="..."/>

来自documentation

  

通过提供静态工厂方法的参数    元素,与构造函数完全相同   实际上已被使用。由...返回的类的类型   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"/>