Spring Modulith ランタイムサポート

前の章で説明した機能はすべて、検証とドキュメント化を目的としたテストシナリオでアプリケーションモジュールの配置を使用していたか、モジュールを疎結合するのに役立つ一般的なサポート機能でしたが、アプリケーションモジュール構造とは直接連携しませんでした。このセクションでは、アプリケーション実行時のモジュール初期化に対する Spring Modulith のサポートについて説明します。

アプリケーションモジュールのランタイムサポートのセットアップ

Spring Modulith のランタイムサポートを有効にするには、プロジェクトに spring-modulith-runtime JAR を必ず含めてください。

<dependency>
  <groupId>org.springframework.modulith</groupId>
  <artifactId>spring-modulith-runtime</artifactId>
  <scope>runtime</scope>
</dependency>
dependencies {
  runtimeOnly 'org.springframework.modulith:spring-modulith-runtime'
}
Spring Modulith のランタイムサポートを使用すると、ArchUnit (英語) ライブラリと J グラフ T (英語) (アプリケーションモジュールをトポロジー的に並べ替えるのに必要) ライブラリの両方をアプリケーションに含めることになることに注意してください。

この JAR を追加すると、アプリケーションに次のコンポーネントを登録する Spring Boot 自動構成が実行されます。

  • ApplicationModules へのアクセスを許可する ApplicationModulesRuntime

  • メインアプリケーションクラスを検出するために、以前の Bean をサポートする SpringBootApplicationRuntime

  • アプリケーションコンテキストで定義された ApplicationModuleInitializer Bean を呼び出す ApplicationStartedEvent のイベントリスナー。

アプリケーションモジュール初期化子

アプリケーションモジュールを使用する場合、アプリケーションの起動時に個々のモジュールに固有のコードを実行する必要があることがよくあります。これは、コードの実行順序がアプリケーションモジュールの依存構造に従う必要があることを意味します。モジュール B がモジュール A に依存している場合、イニシャライザーが別のイニシャライザーに直接依存していない場合でも、A の初期化コードは B の初期化コードより前に実行する必要があります。

Diagram

もちろん、開発者は Spring の標準 @Order アノテーションまたは Ordered インターフェースを介して実行順序を定義できますが、Spring Modulith はアプリケーションの起動時に実行される Bean 用の ApplicationModuleInitializer インターフェースを提供します。これらの Bean の実行順序は、アプリケーションモジュールの依存構造に自動的に従います。

  • Java

  • Kotlin

@Component
class MyInitializer implements ApplicationModuleInitializer {

  @Override
  public void initialize() {
    // Initialization code goes here
  }
}
@Component
class MyInitializer : ApplicationModuleInitializer {


  override fun initialize() {
    // Initialization code goes here
  }
}

ApplicationModuleInitializer Bean は、spring-modulith-runtime JAR がクラスパス上にある場合にのみ呼び出されることに注意してください ( アプリケーションモジュールのランタイムサポートのセットアップを参照)。これは、アプリケーションモジュール構造に従って初期化子をトポロジ的に並べ替えるために必要な依存関係を取得するためです。