我將一些配置通過XML公開給系統部署人員,其餘部分保留在配置bean中。Spring bean創建順序,將@Configuration與@ImportResource混合
我的一些bean依賴於來自XML文件的bean。但是,Spring似乎無法解決這種依賴關係。
主要配置類:
@Configuration
@Import({FeatureTogglesConfig.class, LanguagesConfig.class ... }
的FeatureTogglesConfig類:
@Configuration
@ImportResource(value = "classpath*:**/features-config.xml")
public class FeatureTogglesConfig {
}
這讀取XML文件來創建...:
<bean id="featureManager" class="toggles.FeatureManager">
<constructor-arg>
<set value-type="toggles.Feature">
<value>FAKE_LANGUAGES</value>
</set>
</constructor-arg>
</bean>
FAKE_LANGUAGES是一個枚舉值。它需要的FeatureManager作爲自動連接:
public enum Feature {
FAKE_LANGUAGES;
@Autowired
private FeatureManager manager;
public boolean isActive() {
return manager.isActive(this);
}
的LanguagesConfig使用枚舉在需要的功能,管理者已經設置的方式:
@Bean(name = "fake-latin-language-group")
public FakeLatinLanguageGroup fakeLatinLanguageGroup() {
return if FAKE_LANGUAGES.isActive() ? new FakeLatinLanguageGroup() : ... ;
}
然而,LanguagesConfig的裝載拋出一個NullPointerException
因爲manager
一片空白。 Spring一直無法確定依賴關係並將管理人員連接起來。
我試圖用註釋@DependsOn("featureManager")
來解決這個問題,但它後來抱怨說沒有這樣的bean。
所以看起來@Configuration bean優先於@ImportResource指令,我不能在兩者之間有依賴關係。是對的嗎?
是的,你是對的!在發佈我的問題後我很快意識到這一點。 – Synesso 2013-03-04 20:08:13