Starter vs Plugin vs 业务模块
当你需要为 Forge 添加新功能时,选择正确的扩展方式至关重要。
三种方式对比
| 维度 | Starter | Plugin | 业务模块 |
|---|---|---|---|
| 定位 | 技术能力封装 | 可插拔业务功能 | 不可拆分的业务实现 |
| 位置 | forge-starter-parent | forge-plugin-parent | forge-business |
| 依赖方向 | 被 Plugin 和业务模块依赖 | 依赖 Starter | 依赖 Starter 和 Plugin |
| 可插拔 | 否(基础能力) | 是 | 否 |
| 示例 | forge-starter-cache | forge-plugin-flow | 具体业务实现 |
选择决策树
你的功能是否是技术基础能力(如缓存、认证、日志)?
├── 是 → 创建 Starter
└── 否 → 你的功能是否需要可插拔(按需装卸)?
├── 是 → 创建 Plugin
└── 否 → 你的功能是否依赖多个 Plugin?
├── 是 → 放入业务模块(forge-business)
└── 否 → 创建 Plugin示例场景
场景 1:添加 Redis 缓存能力
选择:Starter
原因:缓存是技术基础能力,被多个 Plugin 和业务模块使用。
做法:创建 forge-starter-cache,封装 Redis 和 Redisson 操作。
场景 2:添加工作流审批功能
选择:Plugin
原因:工作流是可插拔的业务功能,不是所有项目都需要。
做法:创建 forge-plugin-flow,依赖 forge-starter-core 和 forge-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
- 在
forge-starter-parent下创建子模块 - 编写
@AutoConfiguration配置类 - 在
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports中注册 - 在
forge-dependenciesBOM 中管理版本
新建 Plugin
- 在
forge-plugin-parent下创建子模块 - 按标准包结构组织代码(controller/service/mapper/entity)
- 在
forge-admin-server的pom.xml中添加依赖 - 启动时自动扫描装配
新建业务模块
- 在
forge-business下创建子模块 - 依赖所需的 Starter 和 Plugin
- 在
forge-admin-server中引入
