0

我有一个bean工厂类如下:

public class BeanFactory {
public static BeanInterface getInstance(int id) {
    return new Bean(id);
    }
}

我想在spring容器中使用这个类来获取Instrument类的实例,并在其中添加了一个bean条目,applicationcontext.xml如下所示:

<bean id="TestBean" class="com.test.beans.BeanFactory" factory-method="getInstance">
</bean>

但是我找不到任何可以将 id 传递给getInstance工厂方法的方法。有什么办法可以将参数传递给这个工厂方法?

编辑:将 bean 工厂视为 scope="prototype"。TestBean我想要基于 ID 值的新实例。

4

4 回答 4

1

完整的解决方案是:

豆入口:

<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
于 2013-01-15T10:24:34.590 回答
0

<constructor-arg>您可以使用元素将参数传递给工厂方法:

<bean id="TestBean" class="com.test.beans.BeanFactory" factory-method="getInstance">
    <constructor-arg value = "42" />
</bean>
于 2013-01-15T08:49:25.783 回答
0

规则与普通 Spring 构造函数相同,即您可以使用<contructor-arg value="..."/>

文档

静态工厂方法的参数是通过元素提供的,就像实际使用了构造函数一样。工厂方法返回的类的类型不必与包含静态工厂方法的类的类型相同,尽管在本例中是相同的类型。实例(非静态)工厂方法将以基本相同的方式使用(除了使用 factory-bean 属性而不是类属性),因此此处不讨论细节。

于 2013-01-15T08:50:16.103 回答
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"/>
于 2013-01-15T08:52:24.367 回答