IntelliJ IDEA 2025.3 Help

Spring Modulith

Spring Modulith 是一个 Spring 项目,帮助开发者构建结构良好、模块化的 Spring Boot 应用程序。

Spring Modulith 提供了创建领域驱动、模块化单体架构的工具和最佳做法。 这种方式简化了大型复杂应用程序的开发,无需从一开始采用微服务架构。

在 IntelliJ IDEA 中启用 Spring Modulith 支持

Spring Modulith 插件在 IntelliJ IDEA Ultimate 中已捆绑并默认启用。 此功能在 IntelliJ IDEA Community EditionIntelliJ IDEA Edu 中不可用。

当您将依赖项添加到项目时,即可使用 Spring Modulith 支持。 请确保插件已启用:

  1. Ctrl+Alt+S 打开设置,然后选择 插件

  2. 打开 已安装 选项卡,搜索 Spring Modulith ,并确保插件旁的复选框已选中。

Spring Modulith 插件已捆绑且启用

模块化应用程序的结构

Spring Modulith 应用程序通常由以下部分组成:

  • 包含用于运行应用程序类的主软件包。 该类带有 @SpringBootApplication 注解,且通常包含用于运行的 main(…) 方法。

  • 应用程序模块——主软件包的直接子软件包,包含:

    • 提供的接口 :对其他模块开放的 API,通常通过 Spring bean 和该模块发布的领域事件实现。

    • 内部实现组件 :为模块内部使用,外部无法访问。

    • 所需接口 :模块对其他模块功能的使用,例如调用它们的 Spring bean、侦听它们的事件或使用其暴露的配置属性。

以下是一个简单应用程序的示例结构:

Demo ╰─ src/main/java ╰─ bookstore // main package ╰─ BookstoreMainApplication.java ╰─ catalog // application module package ╰─ ProductApi.java // provided interface ╰─ domain ╰─ ProductService.java // internal component ╰─ common ╰─ orders ╰─ web ╰─ OrderRestController.java // ProductApi is required interface ╰─ config

这里 OrderRestController.java 来自 orders 模块,依赖于 catalog 模块中暴露的 ProductApi.java

在 IntelliJ IDEA 中,只要打开 项目 工具窗口 Alt+1 ,即可查看模块化应用程序的结构,并在其构成部分中进行导航。

在下图中,有一个模块化应用,其中顶层模块以绿色锁标记,内部组件以红色锁标记。

包含开放和关闭模块的项目

此外,您还可以从框架视角检查应用程序的 逻辑结构 :选择带有 @SpringBootApplication 注解的主应用程序类并按 Alt+7 (或通过主菜单转到 视图(V) | 工具窗口(T) | 结构)。

Structure 工具窗口中应用程序模块的列表

Modulith 专用 模块 节点会显示应用程序模块的列表、其 ID、允许的依赖以及命名接口。

应用 Spring Modulith 的指导原则

IntelliJ IDEA 通过提供一系列 检查快速修复 ,帮助您保持应用程序结构符合 Spring Modulith 的架构原则。 默认情况下,这些检查的严重级别为错误,但高亮显示的代码不会导致编译或运行时错误。 这些问题只会导致 Modulith 专用测试失败。

在使用 Spring 实现应用程序时,开发者可能需要将多个 Spring bean 注入到其他 bean。 IntelliJ IDEA 通过提供 bean 自动补全功能帮助实现此需求。

针对 Spring Modulith,此功能已进行适配。 如果某个注入违反了应用的模块边界,您将在代码补全弹出窗口中看到警告图标。

从其他模块导入 bean

对于已有代码,IntelliJ IDEA 会高亮违反 Spring Modulith 规则的 bean 用法,并建议可根据模块结构重构代码的快速修复(点击 快速修复图标 或按 Alt+Enter 触发)。

用于已导入 bean 的快速修复

根据架构指引,您可以从下列快速修复中选择:

  • 将组件从原始模块移动到基础软件包。

    将 Java 类移动到基础软件包
  • 将注入的类加上 @NamedInterface 注解以向其他模块开放此类。

    添加了@NamedInterface 注解的类
  • 打开包含该类的模块。

    该快速修复会在包含您希望导入类的模块下创建带有 @ApplicationModule 注解的 package-info.java 文件。 模块被标记为 OPEN

    一个开放的模块

处理应用程序模块依赖

当我们指定模块间依赖时,IntelliJ IDEA 会为模块名称补全与校验以及模块间导航提供支持。

  1. 要显式地为一个模块添加对其他模块的依赖,我们需要在需要该依赖的模块中修改 package-info.java 文件。

    例如,如果想让 orders 模块依赖于 catalogcommon 模块,需要修改位于 orders 模块下的 package-info.java 文件。

    模块依赖方案
  2. package-info.java 文件中,将文本光标放在 allowedDependencies = {""} 的引号内,并按 Ctrl+Space 或开始输入模块名称。

  3. IntelliJ IDEA 会在补全弹窗中显示可用模块依赖:

    • module—— 针对整个模块的依赖。

    • module :: interface—— 针对模块所提供的指定命名接口的依赖。

    • module :: *—— 针对模块所提供的所有接口的依赖。

    显示允许依赖的补全弹窗

    请选择要添加的一项,然后按 Enter

  4. 可以点击已添加的模块并按 Ctrl+B 跳转到该模块。

    该模块将在 项目 工具窗口 Alt+1 中被选中。

    在 Project 工具窗口中选中的模块
  5. 如列为依赖的模块不存在,IntelliJ IDEA 会高亮该引用,并让您修复应用程序结构以避免启动失败。

    模块不存在
2026年 1月 23日