2010-07-06 13 views
31

Mam wiele plików kontekstowych. Wymaganiem jest: jedna konkretna Fasola (która dokonuje pewnych zmian konfiguracji), która ma być zainicjowana najpierw wśród pozostałych składników.Zamówienie inicjacji wiosennej fasoli

Czy istnieje sposób, aby najpierw pobrać tę fasolę?

Jedną z opcji jest użycie atrybutu depend-on. Ale to wymagałoby aktualizacji całej reszty ziaren, więc nie wydaje się najlepszym rozwiązaniem.

Czy mamy lepsze opcje?

Odpowiedz

14

IMHO trzeba czekać aż oni naprawić https://jira.spring.io/browse/SPR-3948

Jeden prawdopodobne sposobem jest użycie zależy na atrybut. Ale znowu, nie chcę dodawać tego atrybutu do wszystkich pozostałych komponentów (to chyba ostatnia deska ratunku dla mnie).

W rzeczywistości nie trzeba używać zależności od na KAŻDEGO I KAŻDEJ fasoli w każdym pliku applicationContext.xml.

Użyj pliku <import /> we wszystkich aplikacjach "lower-lvel" applicationContext.xml, aby zaimportować najwyższy plik applicationContext.xml.

Użyj atrybutu depend-on w definicji każdej fasoli tylko w najwyższym pliku applicationContext.xml, z wyjątkiem <bean />, który chcesz wczytać jako pierwszy.

+0

czy chodzi ci o atrybut depend-on dla tagu importu? –

+0

Mam na myśli użycie w niższym poziomie appContext.xml do importowania appContext.xml najwyższego poziomu. I użyj atrybutu depend-on dla tylko w najwyższym poziomie appContext.xml – dira

+0

kolejność inicjacji nie będzie tak zła jak zależna. Czy ktoś może sprawdzić, czy liczby ujemne są akceptowalne dla kolejności inicjowania. A jeśli domyślną wartością jest 1 lub 0? –

-3

Nie jestem ekspertem od Wiosennego i prawdopodobnie zostaniesz wykrzyknięty przez kogoś, kto jest. Ale do tego czasu ...

Tam, gdzie jest miejsce na niejednoznaczność, przypuszczam, że Spring ładuje/stosuje rzeczy w kolejności, w jakiej napotka je w plikach konfiguracyjnych. Tak więc, jako pierwsze i najprostsze przybliżenie, postaram się zapewnić, że rzecz, którą chcesz zainicjować jako pierwszą, jest jedną z pierwszych rzeczy w twoich plikach konfiguracyjnych.

Jeśli wszystko jest w porządku hierarchicznym, będziesz chciał, aby twoje "pierwsze" konfiguracje znajdowały się w pliku "głównym", zanim inne zostaną wywołane lub, jeśli to możliwe, w pierwszym przywołanym pliku.

+4

wiosna niektóre rodzaje fasoli (jak BeanPostProcessor) wcześniej niż inni, a także usuwa drzewa zależności. Myślę, że nie ma sensu próbować "zamawiać" deklaracji w jakiś sposób - po prostu nie zadziała w ogóle lub natychmiast się złamie po każdej zmianie w twoich ziarnach. –

1

W może być sensowne wymagają uporządkowania fasoli, typowo dla ziaren technicznych (np dodając MBean'ami) mają być załadowane przed fasoli biznesowych (tak jak to jest proponowane w http://jira.springframework.org/browse/SPR-3948)

Korzystanie BeanPostProcessor to kolejny sposób, aby zapewnić pewne zamawianie w twoich ziarnach. Sprawdź AbstractApplicationContext.refresh(), aby zobaczyć, jak jest egzekwowany.

Powiązane problemy