如何在Spring中向工厂bean的工厂方法添加一个参数?

时间:2012-02-28 13:16:34

标签: spring factory

假设我有一个工厂bean:

<bean id="myFactory" class="com.company.MyFactory" lazy-init="true">
  <property name="myProperty" ref="propA">
</bean>

假设propA是由工厂方法中使用的IOC注入的bean。我从这家工厂生产了2个豆子:

<bean id="bean1" factory-bean="myFactory" factory-method="instance"/>
<bean id="bean2" factory-bean="myFactory" factory-method="instance"/>

如何在不使用其他工厂方法的情况下使bean2使用与bean1不同的myProperty?或者,如何将propA作为参数传递给bean1或bean2配置的工厂方法?

1 个答案:

答案 0 :(得分:10)

这可以通过稍微不同的方式实现:

class MyFactory {
    public Bean instance(MyProperty myProperty) {
        return //...
    }
}

现在您可以使用如下的反直觉语法:

<bean id="bean1" factory-bean="myFactory" factory-method="instance">
    <constructor-arg ref="propA"/>
</bean>
<bean id="bean2" factory-bean="myFactory" factory-method="instance">
    <constructor-arg ref="propB"/>
</bean>

信不信由你,propApropB将用作instance()方法参数。