我正在使用@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
,因为它必须确保加载依赖关系的顺序。
答案 0 :(得分:1)
这个问题似乎源于不同版本的弹簧同时可用。当代码保持运行时,@Imports
方法只加载了org.springframework.context.annotation.ConfigurationClassParser.collectImports(AnnotationMetadata, Set<Object>, Set<Object>)
的一小部分。在解析过程中执行被断点暂停时,一切都运行正常。
只要清除多个版本的弹簧库,问题就会消失。 (至少在十几次运行后它没有出现。)
答案 1 :(得分:0)
我认为你应该使用@DependsOn注释 - 它完全针对这种情况设计。