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 ライブラリの複数のバージョンがクリーンアップされるとすぐに、問題は解消されました。(少なくとも、12 回ほど実行した後、再び表示されることはありません。)

于 2013-10-16T09:43:40.213 に答える