我正在使用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")
注释。
答案 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
。这不是最好的做法,但它确实有效。