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

plu*_*us- 4 spring factory

假设我有一个工厂bean:

<bean id="myFactory" class="com.company.MyFactory" lazy-init="true">
  <property name="myProperty" ref="propA">
</bean>
Run Code Online (Sandbox Code Playgroud)

假设propA是由工厂方法中使用的IOC注入的bean.我从这个工厂生成了2个bean:

<bean id="bean1" factory-bean="myFactory" factory-method="instance"/>
<bean id="bean2" factory-bean="myFactory" factory-method="instance"/>
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*icz 10

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

class MyFactory {
    public Bean instance(MyProperty myProperty) {
        return //...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

<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>
Run Code Online (Sandbox Code Playgroud)

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