2012-02-28 122 views
4

讓我們說我有一個工廠bean:如何在Spring中爲工廠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使用不同myProperty的比bean1不使用不同的工廠方法?或者,我如何將propA作爲參數傳遞給來自bean1或bean2配置的工廠方法?

回答

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()方法參數。