我通过 XML 向系统部署者公开一些配置,并将其余配置保存在配置 bean 中。
我的一些 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 无法识别依赖关系并将管理器连接起来。
我试图用 annotation 解决这个问题@DependsOn("featureManager")
,但后来它抱怨说没有这样的 bean。
所以似乎@Configuration bean 优先于@ImportResource 指令,我不能在两者之间建立依赖关系。那正确吗?