2017-10-12 265 views
0

說我有兩個Bean(其中BeanA屬性是不可改變的,需要構造函數注入):重寫構造函數的參數

<bean id="beanA1" class="BeanA"> 
    <constructor-arg type="ServiceA" ref="serviceA" /> 
    <constructor-arg type="ServiceB" ref="serviceB" /> 
    <constructor-arg type="ServiceC" ref="serviceC" /> 
    <constructor-arg type="boolean" value="false" /> 
</bean> 

<bean id="beanA2" class="BeanA"> 
    <constructor-arg type="ServiceA" ref="serviceA" /> 
    <constructor-arg type="ServiceB" ref="serviceB" /> 
    <constructor-arg type="ServiceC" ref="serviceC" /> 
    <constructor-arg type="boolean" value="true" /> 
</bean> 

由於他們分享一切,但布爾,我想將它們合併爲這樣:

<bean id="beanA1" class="BeanA"> 
    <constructor-arg type="ServiceA" ref="serviceA" /> 
    <constructor-arg type="ServiceB" ref="serviceB" /> 
    <constructor-arg type="ServiceC" ref="serviceC" /> 
    <constructor-arg type="boolean" value="false" /> 
</bean> 

<bean id="beanA2" parent="beanA1"> 
    <constructor-arg type="boolean" value="true" /> 
</bean> 

然而,這似乎並不奏效

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'beanA2' defined in class path resource [context.xml]: Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities) 

任何方式與構造函數注入做到這一點?

回答

0

當前的異常告訴你,沒有隻有一個boolean值的構造函數。目前還不清楚爲什麼你需要構造器注入,你可以嘗試只需要將其名稱設置爲false

+0

感謝Vitalii - 這實際上是清楚爲什麼我需要從第一句構造函數注入:)「其中BeanA屬性是不可變的,需要構造函數注入」 –

+0

對不起,我錯過了) –

+0

不用擔心:)在快車道上駕駛! –

1

你不能做你想用構造函數依賴注入來實現的東西,因爲在beanA2的情況下,你正在用一個布爾參數調用一個構造函數。

然而,你可以達到你想要什麼,如果你改變從注入基於構造到的Setter DI:

<bean id="beanA1" class="BeanA"> 
    <property type="ServiceA" ref="serviceA" /> 
    <property type="ServiceB" ref="serviceB" /> 
    <property type="ServiceC" ref="serviceC" /> 
    <property type="boolean" value="false" /> 
</bean> 

<bean id="beanA2" parent="beanA1"> 
    <property type="boolean" value="true" /> 
</bean> 

對於進一步的細節,你可以讀到更多的Spring文檔Bean definition inheritance

+0

感謝arkanoid!這就是我所害怕的......不幸的是,所討論的bean是不可變的,所以setter注入是不能使用的。 –

+0

@levantpied歡迎您。希望下次有用的方式! ;) – araknoid