@ContextConfiguration中配置类的初始化顺序是否会受到影响?

时间:2013-10-15 11:49:58

标签: java spring

我正在使用@ContextConfiguration注释来管理我的应用程序中的配置。创建配置,以便它们仅提供由给定模块公开的bean。因此,给定模块使用的某些bean不一定是直接导入的。例如:

configuration --(use)--> module1 --(cannot @Import)--> database
              \-(use)--------------------------------> database

简而言之,configuration使用module1需要(但不得直接导入)数据库配置。因此,configuration也会使用database模块。

但似乎导入解决的顺序非常随机。即使我使用

@ContextConfiguration(classes={DatabaseConfig.class, Module1Config.class})

这导致初始化(NoSuchBeanDefinitionException)的不确定性失败。

有没有办法影响bean的初始化顺序?或者我应该创建一个@Import依赖项配置的配置叠加层?但在这种情况下,同样的问题适用于@Import,因为它必须确保加载依赖关系的顺序。

2 个答案:

答案 0 :(得分:1)

这个问题似乎源于不同版本的弹簧同时可用。当代码保持运行时,@Imports方法只加载了org.springframework.context.annotation.ConfigurationClassParser.collectImports(‌​AnnotationMetadata, Set<Object>, Set<Object>)的一小部分。在解析过程中执行被断点暂停时,一切都运行正常。

只要清除多个版本的弹簧库,问题就会消失。 (至少在十几次运行后它没有出现。)

答案 1 :(得分:0)

我认为你应该使用@DependsOn注释 - 它完全针对这种情况设计。