IntelliJ IDEA 2025.2 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 // required interface ╰─ config

此处来自 orders 模块的 OrderRestController.java 依赖于来自 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 文件。

    例如,若要使 organization 模块依赖 departmentemployee 模块,我们需要修改位于 organization 模块中的 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 会高亮显示引用内容,从而允许您修复应用结构以防止启动失败。

    模块不存在
最后修改日期: 2025年 9月 22日