Skip to content

Starter vs Plugin vs 业务模块

当你需要为 Forge 添加新功能时,选择正确的扩展方式至关重要。

三种方式对比

维度StarterPlugin业务模块
定位技术能力封装可插拔业务功能不可拆分的业务实现
位置forge-starter-parentforge-plugin-parentforge-business
依赖方向被 Plugin 和业务模块依赖依赖 Starter依赖 Starter 和 Plugin
可插拔否(基础能力)
示例forge-starter-cacheforge-plugin-flow具体业务实现

选择决策树

你的功能是否是技术基础能力(如缓存、认证、日志)?
├── 是 → 创建 Starter
└── 否 → 你的功能是否需要可插拔(按需装卸)?
    ├── 是 → 创建 Plugin
    └── 否 → 你的功能是否依赖多个 Plugin?
        ├── 是 → 放入业务模块(forge-business)
        └── 否 → 创建 Plugin

示例场景

场景 1:添加 Redis 缓存能力

选择:Starter

原因:缓存是技术基础能力,被多个 Plugin 和业务模块使用。

做法:创建 forge-starter-cache,封装 Redis 和 Redisson 操作。

场景 2:添加工作流审批功能

选择:Plugin

原因:工作流是可插拔的业务功能,不是所有项目都需要。

做法:创建 forge-plugin-flow,依赖 forge-starter-coreforge-starter-orm

场景 3:添加客户管理功能

选择:业务模块(或低代码应用)

原因:客户管理是具体业务实现,依赖系统管理的 Plugin。

做法:放入 forge-business 模块,或直接使用低代码平台创建。

场景 4:添加自定义文件存储(如 MinIO)

选择:SPI 实现

原因:文件存储能力由 forge-starter-file 提供,自定义存储方式只需实现 SPI。

做法:实现 FileStorageSPI 接口,注册为 Spring Bean。

场景 5:添加新的社交登录(如飞书)

选择:SPI 实现

原因:社交登录框架由 forge-starter-social 提供,新平台只需实现 SPI。

做法:实现 SocialLoginSPI 接口,注册为 Spring Bean。

创建新模块的步骤

新建 Starter

  1. forge-starter-parent 下创建子模块
  2. 编写 @AutoConfiguration 配置类
  3. META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 中注册
  4. forge-dependencies BOM 中管理版本

新建 Plugin

  1. forge-plugin-parent 下创建子模块
  2. 按标准包结构组织代码(controller/service/mapper/entity)
  3. forge-admin-serverpom.xml 中添加依赖
  4. 启动时自动扫描装配

新建业务模块

  1. forge-business 下创建子模块
  2. 依赖所需的 Starter 和 Plugin
  3. forge-admin-server 中引入

下一步

Forge Admin — 基于 Vue3 + Spring Boot 的企业级后台管理框架