2013-07-10 132 views
4

我正在使用SpringFramework和Java。我使用Spring xml文件來定義體系結構的流程以及將在Java部分中使用的bean。Bean @Autowired在春天默認

我在我的xml文件的同一類的兩個豆,但他們有不同的參數的構造函數:

<bean id="beanA" class="Class" > 
    <constructor-arg><value>valueA1</value></constructor-arg> 
    <constructor-arg><value>ValueA2</value></constructor-arg> 
</bean> 

<bean id="beanB" class="Class" > 
    <constructor-arg><value>valueB1</value></constructor-arg> 
    <constructor-arg><value>valueB2</value></constructor-arg>--> 
</bean> 

有沒有一種方法來設置Bean作爲默認的一個以@Autowired它來自Java?而且,當我想使用非默認bean時,應用@Qulifier("beanName")註釋。

回答

5

primary屬性,如

<bean id="b1" class="test.B" /> 
<bean id="b2" class="test.B" /> 
<bean id="b3" class="test.B" primary="true" /> 

這保證了B3豆將在這裏注入

public class Test { 
    @Autowired 
    B b; 
... 
+0

非常感謝您的支持。最後,我用另一種解決方案,但我會記下你的,因爲它比我的更簡單。 – llberpas

0

最後我用了接下來的事情:我在java中有一個setter(setClassValue(Class classValue))我想使用的類的代碼。然後,我在bean財產autowire-candidate設置爲false,它的不會是默認的:

<bean id="beanA" class="Class" autowire-candidate="false"> 
    <constructor-arg><value>valueA1</value></constructor-arg> 
    <constructor-arg><value>valueA2</value></constructor-arg> 
</bean> 

<bean id="beanB" class="Class" > 
    <constructor-arg><value>valueB1</value></constructor-arg> 
    <constructor-arg><value>valueB2</value></constructor-arg> 
</bean> 

然後,在xml文件,其中我確定那是要@Autowired類的豆在Class,我用這種方式在Java setClassValue(Class classValue)方法:

<bean id="classThatAutowire" class="ClassThatAutowire" > 
    <property name="classValue" ref="beanA" /> 
</bean> 

在Java代碼喲會有@AutowiredbeanB,然後設置beanA。這不是最好的做法,但它有效。