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(請參閱 設定應用程式模組的執行時支援),因為它會引入根據應用程式模組結構拓撲排序初始化器所需的依賴項。