该版本仍在开发中,尚未被视为稳定。最新稳定版请使用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'
}

添加这个 JAR 会触发 Spring Boot 自动配置,注册应用程序中的以下组件:spring-doc.cadn.net.cn

应用模块初始化器

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

图

当然,开发者可以通过 Spring 的标准定义执行顺序@Order注释或命令Spring Modulith 提供了应用模块初始化器在应用启动时运行的 BEANS 接口。这些 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