Spring Modulith 執行階段支援

先前章節中描述的功能都使用了應用程式模組安排,無論是在驗證和文件編寫目的的測試情境中,或是幫助鬆散耦合模組的一般支援功能,但並未直接與應用程式模組結構協同運作。在本節中,我們將描述 Spring Modulith 對於應用程式執行階段模組初始化的支援。

設定應用程式模組的執行階段支援

若要啟用 Spring Modulith 的執行階段支援,請確保在您的專案中包含 spring-modulith-runtime JAR 檔。

  • Maven

  • Gradle

<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 的執行階段支援意味著您將在應用程式中包含 ArchUnitJGraphT (拓樸排序應用程式模組所需) 程式庫。

新增此 JAR 檔將導致 Spring Boot 自動組態執行,在您的應用程式中註冊以下組件

  • 一個 ApplicationModulesRuntime,允許存取 ApplicationModules

  • 一個 SpringBootApplicationRuntime,支援前述 bean 以偵測主要應用程式類別。

  • 一個 ApplicationStartedEvent 事件的事件監聽器,將會調用在應用程式內容中定義的 ApplicationModuleInitializer bean。

應用程式模組初始化器

當使用應用程式模組時,在應用程式啟動時需要執行一些特定於個別模組的程式碼是很常見的。這表示該程式碼的執行順序需要遵循應用程式模組的依賴結構。如果模組 B 依賴於模組 A,則 A 的初始化程式碼必須在 B 的程式碼之前執行,即使初始化器之間沒有直接的依賴關係。

Diagram

雖然開發人員當然可以透過 Spring 的標準 @Order 註解或 Ordered 介面來定義執行順序,但 Spring Modulith 提供了 ApplicationModuleInitializer 介面,供 bean 在應用程式啟動時執行。這些 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
  }
}

請注意,只有當 spring-modulith-runtime JAR 檔在類別路徑上時 (請參閱 設定應用程式模組的執行階段支援),才會調用 ApplicationModuleInitializer bean,因為這會引入根據應用程式模組結構拓樸排序初始化器所需的依賴項。