该版本仍在开发中,尚未被视为稳定。最新稳定版请使用Spring Modulith 2.0.0spring-doc.cadn.net.cn

Spring Modulith 运行时支持

前几章描述的功能都曾在测试场景中使用应用模块的布局进行验证和文档化,或者作为一般支持功能,帮助松散耦合模块,但并未直接与应用模块结构协作。 在本节中,我们将介绍 Spring Modulith 在应用运行时对模块初始化的支持。spring-doc.cadn.net.cn

如果你对这里描述的应用模块检测应用自定义,除非已经存在,否则你需要把这些自定义转移到你的生产源,以确保这些功能被考虑在内。

为应用模块设置运行时支持

要启用 Spring Modulith 的运行时支持,请确保包含Spring-模量-运行时间你的项目里的JAR。spring-doc.cadn.net.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.cadn.net.cn

应用模块初始化器

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

图

当然,开发者可以通过 Spring 的标准定义执行顺序@Order注释或命令Spring Modulith 提供了应用模块初始化器用于在应用程序启动时运行的 BEANS 接口。 这些豆子的执行顺序会自动遵循应用模块的依赖结构。spring-doc.cadn.net.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
  }
}

注意应用模块初始化器只有当Spring-模量-运行时间JAR位于类路径上(参见“设置应用模块运行时支持”),因为它会根据应用模块结构拉取初始化器所需的依赖关系,以拓扑排序初始化器。spring-doc.cadn.net.cn