【发布时间】:2013-03-04 06:23:10
【问题描述】:
我通过 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 无法识别依赖关系并将管理器连接起来。
我尝试使用注解@DependsOn("featureManager") 解决此问题,但随后它抱怨说没有这样的bean。
因此,@Configuration bean 似乎优先于 @ImportResource 指令,我不能在两者之间建立依赖关系。对吗?
【问题讨论】:
标签: spring