4

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

4

2 回答 2

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;
...
于 2013-07-10T10:03:46.060 回答
0

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

<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我定义要访问的类的 bean 的文件中@AutowiredClass我以这种方式使用 javasetClassValue(Class classValue)方法:

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

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

于 2013-07-15T14:55:30.203 回答