2012-06-12 3 views
11

Имеет ли два определения для компонента (с тем же именем и классом), действующего весной IOC?Определение того же самого весеннего боба с тем же именем

У меня есть два файла определения bean-файлов, включенные в web.xml. См. Образец ниже.

ApplicationContext-beans1.xml

<bean name="myWao" 
    class="com.beans.myBean">  
</bean> 

ApplicationContext-beans2.xml

<bean name="myWao" 
    class="com.beans.myBean">  
</bean> 

Я не сталкивается с какой-либо вопрос до сих пор. Но может ли это повлиять на реальную среду, которая будет многопоточной и сгруппирована?

Примечание: Оба XMLs загружены, как я могу использовать другие бобы, определенные (только один раз) в обоих XMLs

+0

Оба файла xml действительно загружены? –

+0

Да. Оба загружены. – hop

+0

Возможный дубликат [Верхний фасоль Весны] (http://stackoverflow.com/questions/5849192/springs-overriding-bean) –

ответ

27

Это действует, но вы обнаружите, что один боб переопределяется Другие. Вы увидите это в журналах как

Overriding bean definition for... 

Это поведение позволяет переопределить ранее предоставленные определения bean-компонентов. Это влияет на статическую сборку вашего приложения и не относится к потоковой/кластеризации, как было предложено в вашем вопросе.

Обратите внимание, что DefaultListableBeanFactory позволяет настроить такое поведение с помощью setAllowBeanDefinitionOverriding()

+0

setAllowBeanDefinitionOverriding() необходимо выполнить на ранней стадии. Если вы программно создаете контекст bean, убедитесь, что вы используете конструктор с параметром refresh, установленным на false, а затем «вручную» запускаете загрузку. Это будет работать, даже когда ваши весенние бобы будут распределены по нескольким файлам/контекстам. В противном случае, если вы включите ведение журнала DEBUG, вы увидите только записи журнала, такие как 'DEBUG osbfsDefaultListableBeanFactory - переопределение определения bean-компонента для bean-myBean с эквивалентным определением: замена ... [spring/config1.xml]] с помощью ... ; определенный в ... [spring/config2.xml]] ' –

6

Это справедливо и полезно, особенно при попытке изменить реализацию боба третьей стороны (я имею в виду, где вы не можете изменить реализация компонента) и где вам нужно предоставить/настроить дополнительные (слияние) свойства для bean-компонента.

Переопределение компонента bean зависит от порядка xmls, который вы предоставляете, для создания ApplicationContext через web.xml или отдельно. Последнее определение бит выиграет игру.

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