6

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

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

换句话说,需要(但不能直接导入)数据库配置的configuration用途。因此,也使用模块。module1configurationdatabase

但似乎解决导入的顺序是相当随机的。即使我使用

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

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

有什么方法可以影响 bean 的初始化顺序吗?或者我应该创建一个配置覆盖,@Import这些配置沿着依赖项配置?但在这种情况下,同样的问题也适用,@Import因为它必须确保加载依赖项的顺序。

4

2 回答 2

1

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

一旦清理了多个版本的 spring 库,问题就消失了。(至少在十几次运行之后它没有再次出现。)

于 2013-10-16T09:43:40.213 回答
0

我认为你应该使用@DependsOn注释——它正是为这种情况设计的。

于 2013-10-15T12:12:57.560 回答