此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Modulith 1.3.0spring-doc.cn

Spring Modulith 运行时支持

前几章中描述的功能都在测试场景中使用了应用程序模块安排以进行验证和文档记录,或者是有助于松散耦合模块但不能直接与应用程序模块结构一起使用的一般支持功能。 在本节中,我们将描述 Spring Modulith 对应用程序运行时模块初始化的支持。spring-doc.cn

设置应用程序模块的运行时支持

要启用 Spring Modulith 的运行时支持,请确保在项目中包含 JAR。spring-modulith-runtimespring-doc.cn

<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 自动配置运行,从而在应用程序中注册以下组件:spring-doc.cn

应用程序模块初始化器

使用应用程序模块时,通常需要在应用程序启动时执行一些特定于单个模块的代码。 这意味着该代码的执行顺序需要遵循应用程序模块的依赖项结构。 如果模块 B 依赖于模块 A,则 A 的初始化代码必须在 B 的初始化代码之前运行,即使初始化器不直接依赖于另一个初始化器。spring-doc.cn

图

虽然开发人员当然可以通过 Spring 的标准注释或接口来定义执行顺序,但 Spring Modulith 为 bean 提供了一个接口,以便在应用程序启动时运行。 这些 bean 的执行顺序将自动遵循应用程序模块依赖项结构。@OrderOrderedApplicationModuleInitializerspring-doc.cn

@Component
class MyInitializer implements ApplicationModuleInitializer {

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


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

请注意,仅当 JAR 位于 Classpath 上时才会调用 bean(请参见设置应用程序模块的运行时支持),因为这会提取根据应用程序模块结构对初始值设定项进行拓扑排序所需的依赖项。ApplicationModuleInitializerspring-modulith-runtimespring-doc.cn