代码优化提交
This commit is contained in:
+24
-27
@@ -45,19 +45,18 @@ src/main/java/com/example/workutils/
|
||||
│ │ ├── ConsoleHelper.java # 控制台交互工具类
|
||||
│ │ ├── FileOperationService.java# 文件操作服务(读取/扫描/写入/路径管理)
|
||||
│ │ └── OutputService.java # 输出服务(CSV/Excel)
|
||||
│ ├── tool/ # Tool 基础契约
|
||||
│ │ └── Tool.java # 工具基础接口(Plugin 继承此接口)
|
||||
│ ├── plugin/ # Tool 基础契约
|
||||
│ │ └── Tool.java # 工具接口(合并了原 Plugin,各 biz 模块直接实现)
|
||||
│ └── plugin/ # 插件化框架
|
||||
│ ├── Plugin.java # 插件接口(扩展 Tool,增加生命周期)
|
||||
│ ├── PluginDescriptor.java # 插件描述符(id/name/version/description/dependencies)
|
||||
│ ├── PluginContext.java # 插件运行时上下文
|
||||
│ ├── PluginManager.java # 插件管理器(生命周期 + 注册 + 主菜单 + 命令分发)
|
||||
│ └── PluginState.java # 插件状态枚举(UNLOADED/LOADED/ACTIVE/DISABLED/ERROR)
|
||||
└── biz/ # 业务插件层(各模块是独立 Plugin)
|
||||
└── biz/ # 业务插件层(各模块实现 Tool 接口)
|
||||
├── batch/ # 批量处理插件
|
||||
│ └── BatchTool.java # 批量检查入口(实现 Plugin)
|
||||
│ └── BatchTool.java # 批量检查入口(实现 Tool)
|
||||
├── git/ # Git 操作插件
|
||||
│ ├── GitTool.java # Git 插件入口(实现 Plugin)
|
||||
│ ├── GitTool.java # Git 插件入口(实现 Tool)
|
||||
│ └── service/ # 服务实现层
|
||||
│ ├── GitService.java # Git 服务接口
|
||||
│ ├── GitServiceImpl.java # Git 服务实现
|
||||
@@ -76,20 +75,20 @@ src/main/java/com/example/workutils/
|
||||
│ ├── CheckBranchChangesStrategy.java
|
||||
│ └── CheckoutAndPullStrategy.java
|
||||
├── mybatisexport/ # MyBatis SQL导出插件
|
||||
│ ├── MyBatisExportTool.java # SQL 导出入口(实现 Plugin)
|
||||
│ ├── MyBatisExportTool.java # SQL 导出入口(实现 Tool)
|
||||
│ └── service/
|
||||
│ ├── MyBatisExportService.java # SQL 导出服务
|
||||
│ └── model/
|
||||
│ └── MybatisTag.java # MyBatis 标签数据对象
|
||||
├── mybatisgenerator/ # MyBatis逆向工程插件
|
||||
│ ├── MyBatisGeneratorTool.java # 逆向工程入口(实现 Plugin)
|
||||
│ ├── MyBatisGeneratorTool.java # 逆向工程入口(实现 Tool)
|
||||
│ └── service/generator/
|
||||
│ ├── MyBatisGeneratorService.java # 逆向工程服务
|
||||
│ ├── CustomCommentGenerator.java # 自定义注释生成器
|
||||
│ ├── LombokPlugin.java # Lombok 插件(@Data)
|
||||
│ └── SelectiveOnlyPlugin.java # 只保留 Selective 方法插件
|
||||
└── scanner/ # 扫描插件
|
||||
├── ScannerTool.java # 扫描工具入口(实现 Plugin)
|
||||
├── ScannerTool.java # 扫描工具入口(实现 Tool)
|
||||
└── service/ # 服务实现层
|
||||
├── ScannerService.java # 扫描服务
|
||||
└── config/
|
||||
@@ -117,17 +116,17 @@ src/main/java/com/example/workutils/
|
||||
|
||||
| 文件 | 作用 |
|
||||
|------|------|
|
||||
| `Plugin.java` | **插件接口**,继承 `Tool`,增加生命周期方法 `onLoad(PluginContext)` / `onUnload()`,`getId()`/`getName()` 默认委托给 `PluginDescriptor` |
|
||||
| `Tool.java` | **工具接口**,合并了原 Plugin,包含生命周期方法 `onLoad(PluginContext)` / `onUnload()`,`getId()`/`getName()` 默认委托给 `PluginDescriptor` |
|
||||
| `PluginDescriptor.java` | 插件描述符(不可变),包含 `id`、`name`、`version`、`description`、`dependencies`,通过 Builder 模式构建 |
|
||||
| `PluginContext.java` | 插件运行时上下文,提供 `PluginManager` 引用和跨插件共享属性 |
|
||||
| `PluginManager.java` | **插件管理器**(`@Component`),负责:生命周期管理(load/enable/disable)、注册发现(按 id/command 查找)、启用过滤(白名单/黑名单)、主菜单交互循环、命令行分发 |
|
||||
| `PluginState.java` | 插件状态枚举:`UNLOADED` → `LOADED` → `ACTIVE` / `DISABLED` / `ERROR` |
|
||||
|
||||
#### 3.2.2 Tool 基础契约(`system/tool/`)
|
||||
#### 3.2.2 Tool 基础契约(`system/plugin/`)
|
||||
|
||||
#### `Tool.java`
|
||||
- **作用**: 工具基础接口,定义 `getId()`、`getName()`、`getMenuOptions()`、`execute()`、`handleChoice()`、`getCommandName()`、`executeCommand()` 等方法
|
||||
- **关系**: `Plugin` 继承 `Tool`,biz 模块直接实现 `Plugin`
|
||||
- **作用**: 工具接口,定义 `getDescriptor()`、`getId()`、`getName()`、`getMenuOptions()`、`execute()`、`handleChoice()`、`getCommandName()`、`executeCommand()`、`onLoad(PluginContext)`、`onUnload()` 等方法
|
||||
- **关系**: biz 模块直接实现 `Tool`
|
||||
|
||||
#### 3.2.3 共享基础设施(`system/support/`)
|
||||
|
||||
@@ -147,13 +146,13 @@ src/main/java/com/example/workutils/
|
||||
|
||||
### 3.3 业务插件层(`biz/`)
|
||||
|
||||
> **架构约定**: 每个 biz 模块的 Tool 类放在模块根目录,实现 `Plugin` 接口(继承自 `Tool`)。通过静态 `PluginDescriptor` 声明插件元数据(id/name/version/description)。所有服务实现及附属文件收在 `service/` 子包下,内部细节用 `internal/` 隔离。
|
||||
> **架构约定**: 每个 biz 模块的 Tool 类放在模块根目录,实现 `Tool` 接口。通过静态 `PluginDescriptor` 声明插件元数据(id/name/version/description)。所有服务实现及附属文件收在 `service/` 子包下,内部细节用 `internal/` 隔离。
|
||||
|
||||
#### 3.3.1 扫描插件(`biz/scanner/`)
|
||||
|
||||
| 文件 | 作用 |
|
||||
|------|------|
|
||||
| `ScannerTool.java` | 扫描插件入口(实现 Plugin),版本 `1.0.0`,负责菜单交互,委托 ScannerService 执行业务逻辑 |
|
||||
| `ScannerTool.java` | 扫描插件入口(实现 Tool),版本 `1.0.0`,负责菜单交互,委托 ScannerService 执行业务逻辑 |
|
||||
| `service/ScannerService.java` | 扫描服务,支持关键词扫描、Redis Key 扫描、Dubbo 接口扫描三种类型,支持并发多项目扫描 |
|
||||
| `service/config/ScanConfig.java` | 扫描配置,定义文件扩展名、排除目录、最大文件大小等参数 |
|
||||
|
||||
@@ -161,7 +160,7 @@ src/main/java/com/example/workutils/
|
||||
|
||||
| 文件 | 作用 |
|
||||
|------|------|
|
||||
| `MyBatisExportTool.java` | SQL 导出插件入口(实现 Plugin),版本 `1.0.0`,负责菜单交互 |
|
||||
| `MyBatisExportTool.java` | SQL 导出插件入口(实现 Tool),版本 `1.0.0`,负责菜单交互 |
|
||||
| `service/MyBatisExportService.java` | SQL 导出核心服务,从 XML 文件中提取 select/insert/update/delete 标签 |
|
||||
| `service/model/MybatisTag.java` | MyBatis 标签数据对象 |
|
||||
|
||||
@@ -169,7 +168,7 @@ src/main/java/com/example/workutils/
|
||||
|
||||
| 文件 | 作用 |
|
||||
|------|------|
|
||||
| `MyBatisGeneratorTool.java` | 逆向工程插件入口(实现 Plugin),版本 `1.0.0` |
|
||||
| `MyBatisGeneratorTool.java` | 逆向工程插件入口(实现 Tool),版本 `1.0.0` |
|
||||
| `service/generator/MyBatisGeneratorService.java` | MyBatis 逆向工程服务 |
|
||||
| `service/generator/CustomCommentGenerator.java` | 自定义注释生成器 |
|
||||
| `service/generator/LombokPlugin.java` | Lombok 插件(@Data) |
|
||||
@@ -179,7 +178,7 @@ src/main/java/com/example/workutils/
|
||||
|
||||
| 文件 | 作用 |
|
||||
|------|------|
|
||||
| `GitTool.java` | Git 插件入口(实现 Plugin),版本 `1.0.0` |
|
||||
| `GitTool.java` | Git 插件入口(实现 Tool),版本 `1.0.0` |
|
||||
| `service/GitService.java` | Git 服务接口 |
|
||||
| `service/GitServiceImpl.java` | Git 服务实现 |
|
||||
| `service/config/GitOptimizationConfig.java` | Git 性能优化配置 |
|
||||
@@ -194,7 +193,7 @@ src/main/java/com/example/workutils/
|
||||
|
||||
| 文件 | 作用 |
|
||||
|------|------|
|
||||
| `BatchTool.java` | 批量处理插件入口(实现 Plugin),版本 `1.0.0`,一键执行多种检查 |
|
||||
| `BatchTool.java` | 批量处理插件入口(实现 Tool),版本 `1.0.0`,一键执行多种检查 |
|
||||
|
||||
---
|
||||
|
||||
@@ -224,8 +223,8 @@ src/main/resources/
|
||||
|
||||
| 模式/特点 | 应用位置 | 说明 |
|
||||
|-----------|---------|------|
|
||||
| **插件架构** | `Plugin` + `PluginManager` + `PluginDescriptor` | 每个 biz 模块作为独立 Plugin,声明版本、描述,PluginManager 统一管理生命周期(load/enable/disable),可插拔扩展 |
|
||||
| **策略模式** | `Tool` / `Plugin` 接口 + 各 biz 实现 | 各插件通过实现 Plugin 接口注册到 PluginManager,支持交互和命令行双模式 |
|
||||
| **插件架构** | `Tool` + `PluginManager` + `PluginDescriptor` | 每个 biz 模块作为独立 Tool,声明版本、描述,PluginManager 统一管理生命周期(load/enable/disable),可插拔扩展 |
|
||||
| **策略模式** | `Tool` 接口 + 各 biz 实现 | 各插件通过实现 Tool 接口注册到 PluginManager,支持交互和命令行双模式 |
|
||||
| **策略模式** | `GitCommandStrategy` + 各 Strategy 实现 | Git 命令执行策略,`GitStrategyFactory` 管理注册 |
|
||||
| **工厂模式** | `PluginManager`、`GitStrategyFactory` | Spring 自动发现和注入 Bean |
|
||||
| **命令模式** | `GitCommand` + `GitCommandController` | 封装 Git 命令的异步执行、中断、跳过 |
|
||||
@@ -235,7 +234,7 @@ src/main/resources/
|
||||
| **模板回调** | `FileOperationService.scanFilesRecursively` | 使用 `SimpleFileVisitor` 实现文件遍历回调 |
|
||||
| **分层架构** | `system/` vs `biz/` | system 定义平台契约与共享基础设施,biz 实现具体插件 |
|
||||
| **内部隔离** | `biz/*/service/internal/` | 内部实现类用 `internal/` 隔离,不对外暴露 |
|
||||
| **生命周期管理** | `Plugin.onLoad()` / `Plugin.onUnload()` | 插件加载/卸载回调,PluginContext 传递运行时上下文 |
|
||||
| **生命周期管理** | `Tool.onLoad()` / `Tool.onUnload()` | 插件加载/卸载回调,PluginContext 传递运行时上下文 |
|
||||
|
||||
---
|
||||
|
||||
@@ -260,7 +259,7 @@ WorkUtilsApplication (入口)
|
||||
|
||||
插件加载链路:
|
||||
PluginManager.init()
|
||||
├── 遍历 Spring 中所有 Plugin Bean
|
||||
├── 遍历 Spring 中所有 Tool Bean
|
||||
├── 依次调用 plugin.onLoad(PluginContext)
|
||||
├── 按 ToolsConfig 过滤启用/禁用
|
||||
└── 构建 pluginByIdMap / pluginByCommandMap / pluginStates
|
||||
@@ -318,9 +317,7 @@ WorkUtilsApplication (入口)
|
||||
### 8.2 接口层次
|
||||
|
||||
```
|
||||
Tool (system/tool/) ← 基础契约:getId/getName/getMenuOptions/execute/...
|
||||
↑
|
||||
Plugin (system/plugin/) ← 扩展契约:+getDescriptor/onLoad/onUnload
|
||||
Tool (system/plugin/) ← 统一契约:getDescriptor/onLoad/onUnload/getMenuOptions/execute/...
|
||||
↑
|
||||
各 biz 模块 ← 具体实现:@Component + PluginDescriptor
|
||||
```
|
||||
@@ -352,7 +349,7 @@ UNLOADED ──load──▶ LOADED ──enable──▶ ACTIVE ──disable
|
||||
|
||||
当前已完成插件化基础框架搭建,后续可进一步实现:
|
||||
|
||||
1. **SPI 自动发现** — 通过 `META-INF/services` 或 Spring Factories 自动发现外部 jar 中的 Plugin 实现
|
||||
1. **SPI 自动发现** — 通过 `META-INF/services` 或 Spring Factories 自动发现外部 jar 中的 Tool 实现
|
||||
2. **独立打包** — 每个 biz 模块打成独立 jar,`PluginManager` 动态加载
|
||||
3. **热加载** — 基于自定义 ClassLoader 实现插件的动态加载/卸载/更新
|
||||
4. **依赖注入隔离** — 每个插件使用独立 Spring 子容器(`ApplicationContext`),避免 Bean 冲突
|
||||
|
||||
Reference in New Issue
Block a user