Spring Modulith
Spring Modulith 是一个 Spring 项目,帮助开发者构建结构良好、模块化的 Spring Boot 应用程序。
Spring Modulith 提供了创建领域驱动、模块化单体架构的工具和最佳做法。 这种方式简化了大型复杂应用程序的开发,无需从一开始采用微服务架构。
在 IntelliJ IDEA 中启用 Spring Modulith 支持
Spring Modulith 插件在 IntelliJ IDEA Ultimate 中已捆绑并默认启用。 此功能在 IntelliJ IDEA Community Edition 和 IntelliJ IDEA Edu 中不可用。
当您将依赖项添加到项目时,即可使用 Spring Modulith 支持。 请确保插件已启用:
按 Ctrl+Alt+S 打开设置,然后选择 。
打开 已安装 选项卡,搜索 Spring Modulith ,并确保插件旁的复选框已选中。

模块化应用程序的结构
Spring Modulith 应用程序通常由以下部分组成:
包含用于运行应用程序类的主软件包。 该类带有
@SpringBootApplication注解,且通常包含用于运行的main(…)方法。应用程序模块——主软件包的直接子软件包,包含:
提供的接口 :对其他模块开放的 API,通常通过 Spring bean 和该模块发布的领域事件实现。
内部实现组件 :为模块内部使用,外部无法访问。
所需接口 :模块对其他模块功能的使用,例如调用它们的 Spring bean、侦听它们的事件或使用其暴露的配置属性。
以下是一个简单应用程序的示例结构:
这里 OrderRestController.java 来自 orders 模块,依赖于 catalog 模块中暴露的 ProductApi.java。
在 IntelliJ IDEA 中,只要打开 项目 工具窗口 Alt+1 ,即可查看模块化应用程序的结构,并在其构成部分中进行导航。
在下图中,有一个模块化应用,其中顶层模块以绿色锁标记,内部组件以红色锁标记。

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

Modulith 专用 模块 节点会显示应用程序模块的列表、其 ID、允许的依赖以及命名接口。
应用 Spring Modulith 的指导原则
IntelliJ IDEA 通过提供一系列 检查和 快速修复 ,帮助您保持应用程序结构符合 Spring Modulith 的架构原则。 默认情况下,这些检查的严重级别为错误,但高亮显示的代码不会导致编译或运行时错误。 这些问题只会导致 Modulith 专用测试失败。
在使用 Spring 实现应用程序时,开发者可能需要将多个 Spring bean 注入到其他 bean。 IntelliJ IDEA 通过提供 bean 自动补全功能帮助实现此需求。
针对 Spring Modulith,此功能已进行适配。 如果某个注入违反了应用的模块边界,您将在代码补全弹出窗口中看到警告图标。

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

根据架构指引,您可以从下列快速修复中选择:
将组件从原始模块移动到基础软件包。

将注入的类加上 @NamedInterface 注解以向其他模块开放此类。

打开包含该类的模块。
该快速修复会在包含您希望导入类的模块下创建带有
@ApplicationModule注解的package-info.java文件。 模块被标记为OPEN。
处理应用程序模块依赖
当我们指定模块间依赖时,IntelliJ IDEA 会为模块名称补全与校验以及模块间导航提供支持。
要显式地为一个模块添加对其他模块的依赖,我们需要在需要该依赖的模块中修改
package-info.java文件。例如,如果想让
orders模块依赖于catalog和common模块,需要修改位于orders模块下的package-info.java文件。
在
package-info.java文件中,将文本光标放在allowedDependencies = {""}的引号内,并按 Ctrl+Space 或开始输入模块名称。IntelliJ IDEA 会在补全弹窗中显示可用模块依赖:
module—— 针对整个模块的依赖。module :: interface—— 针对模块所提供的指定命名接口的依赖。module :: *—— 针对模块所提供的所有接口的依赖。

请选择要添加的一项,然后按 Enter。
可以点击已添加的模块并按 Ctrl+B 跳转到该模块。
该模块将在 项目 工具窗口 Alt+1 中被选中。

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