2013-07-10 3 views
4

Я работаю с SpringFramework и Java. Я использую Spring xml-файлы, чтобы определить поток архитектуры, а также компоненты, которые будут использоваться в Java-части.Bean @ По умолчанию используется весна

У меня есть два фасоли одного и того же класса в моем файле 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> 

Есть ли способ, чтобы установить один из бобов, как по умолчанию, чтобы @Autowired это от Java? И, когда я хочу использовать компонент non default, примените аннотацию @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

Наконец я использовал следующую вещь: у меня есть сеттер (setClassValue(Class classValue)) в Java код для класса, который я хочу использовать. Затем я установил свойство 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 файле, в котором я ограничивающий боб класса, который собирается @AutowiredClass, я использую метод Java setClassValue(Class classValue) на этом пути:

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

В коде Java лет будет @Autowired в beanB, а затем установите beanA. Это не лучшая практика, но она работает.

Смежные вопросы