Bean @Autowired默认在春天

时间:2013-07-10 09:33:15

标签: java spring autowired

我正在使用SpringFramework和Java。我使用Spring xml文件来定义体系结构的流程以及将在Java部分中使用的bean。

我的xml文件中有两个相同类的bean,但它们的构造函数有不同的参数:

<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设置为默认值,以便从Java @Autowired创建它?并且,当我想使用非默认bean时,应用@Qulifier("beanName")注释。

2 个答案:

答案 0 :(得分:5)

尝试primary属性,例如

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

这保证了b3 bean将被注入

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

答案 1 :(得分:0)

最后我使用了下一件事:我在我想要使用的类的java代码中有一个setter(setClassValue(Class classValue))。然后,我将autowire-candidate中的属性false设置为bean,它不会是默认值:

<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定义到类的bean,我使用java setClassValue(Class classValue)方法这样:

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

在Java代码中,您将@Autowired beanB,然后设置beanA。这不是最好的做法,但它确实有效。