2012-06-12 16 views
11

Czy ma dwie definicje komponentu bean (o tej samej nazwie i klasie) obowiązującego w Spring IOC?Definiowanie tego samego komponentu Spring bean o tej samej nazwie

Mam dwa pliki definicji fasoli zawarte w pliku web.xml. Zobacz przykład poniżej.

ApplicationContext-beans1.xml

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

ApplicationContext-beans2.xml

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

ja nie napotykając żadnych kwestii do dziś. Czy jednak będzie to miało wpływ na rzeczywiste środowisko, które będzie wielowątkowe i skupione?

Uwaga: Zarówno plików XML są ładowane jak jestem w stanie korzystać z innych fasoli zdefiniowane (tylko jeden raz) w obu plików XML

+0

oba pliki xml są naprawdę załadowane? –

+0

Tak. Oba są załadowane. – hop

+0

możliwy duplikat [Wiosennego nadpisywania fasoli] (http://stackoverflow.com/questions/5849192/springs-overriding-bean) –

Odpowiedz

27

To ważne, ale przekonasz się, że jeden fasola jest przesłonięta przez inny. Zobaczysz to w dziennikach jako: To zachowanie umożliwia zastąpienie wcześniej dostarczonych definicji komponentów bean. Wpływa na montaż statyczny aplikacji i nie odnosi się do wątków/klastrowania, jak sugeruje to Twoje pytanie.

Zauważ, że DefaultListableBeanFactory pozwala skonfigurować ten problem poprzez setAllowBeanDefinitionOverriding()

+0

setAllowBeanDefinitionOverriding() musi być zrobione wcześniej. Jeśli programujesz tworzenie kontekstu komponentu bean, upewnij się, że używasz konstruktora z odświeżonym parametrem ustawionym na wartość false, a następnie "ręcznie" ładujesz wyzwalacz. Będzie to działało nawet wtedy, gdy twoje fasolki szparagowe są rozłożone na wiele plików/kontekstów. W przeciwnym razie, jeśli włączysz rejestrowanie DEBUG, zobaczysz tylko wpisy dziennika, takie jak 'DEBUG osbfsDefaultListableBeanFactory - Zastępowanie definicji fasoli dla bean 'myBean' z równoważną definicją: zastąpienie ... [spring/config1.xml]] z ... ; zdefiniowane w ... [spring/config2.xml]] ' –

6

ta jest ważna i przydatna zwłaszcza przy próbie zmiany realizację trzeciego fasoli Party (mam na myśli, gdzie nie wolno, aby zmienić implementacja komponentu bean) i gdzie należy zapewnić/skonfigurować dodatkowe właściwości (scalania) komponentu bean.

Zastąpienie fasoli zależy od kolejności xmls, którą dostarczysz, aby zbudować ApplicationContext poprzez plik web.xml lub samodzielny. Najnowsza definicja fasoli wygra grę.