Używam adnotacji @ContextConfiguration
do zarządzania konfiguracjami w mojej aplikacji. Konfiguracje są tworzone w taki sposób, że dostarczają tylko ziarna, które są naświetlone przez dany moduł. Z tego powodu niektóre ziarna używane przez dany moduł niekoniecznie są importowane bezpośrednio. Przykład:Czy można wpływać na kolejność inicjowania klas konfiguracji w @ContextConfiguration?
configuration --(use)--> module1 --(cannot @Import)--> database
\-(use)--------------------------------> database
W słowy configuration
wykorzystuje module1
wymagającą (ale nie musi importować) konfiguracji bazy danych. Dlatego też configuration
używa również modułu database
.
Wygląda jednak na to, że kolejność, w jakiej rozpatrywane są przywozy, jest dość przypadkowa. Nawet jeśli używam
@ContextConfiguration(classes={DatabaseConfig.class, Module1Config.class})
Powoduje uszkodzenia indeterministyczną na inicjalizacji (NoSuchBeanDefinitionException
).
Czy istnieje sposób wpływania na kolejność inicjacji fasoli? A może powinienem utworzyć nakładkę konfiguracji, które konfigurują się na zależnościach? Ale w takim przypadku to samo pytanie dotyczy @Import
, ponieważ ma zapewnić kolejność ładowania zależności.
Niestety, adnotacja @DependsOn po prostu czyni zależność jawną, ale nie powoduje cofnięcia, aby ewentualnie załadować brakujące ziarna z innych konfiguracji. – allprog
Jaki jest prawdziwy problem, który próbujesz rozwiązać i dlaczego twoja zależna fasola nie powinna być opisana jako zależna od konfiguracji (może być przez interfejsy)? –
Jeśli uwzględnię konfigurację DB w konfiguracji modułów, które jej używają, nie będzie można zmienić tej definicji DB na coś innego. Na przykład, jeśli chcę skupić się na testach jednostkowych na module wyższego poziomu, staram się unikać ładowania bazy danych i jak najszybciej próbuję złamać drzewo zależności. Albo tworzę różne konfiguracje do testowania i produkcji, albo tworzę konfiguracje w sposób skupiony i unikam zależności między nimi, w ten sposób w testach mogę wybrać, co ładuję. – allprog