开源:https://gitee.com/leijmdas/ruwebframe.git
ruwebframe是基于Rust(actix-web)的工业级Web开发框架,包含四大核心模块:1) rucmd命令行工具,支持加密/解密、配置查看和依赖注入代码生成;2) rulog日志模块,提供分级日志、文件轮转和控制台输出;3) rudi依赖注入容器,实现类似Spring IoC的功能,支持单例/多例注册;4) rucfg配置管理,基于YAML支持多环境切换和环境变量解析。各模块通过DI容器协同工作,形成完整的基础设施层,定位为对标Go语言的"开发者神器"。
ruwebframe has 4 core modules:
1. **rucmd** - 命令行工具模块,提供命令行接口,支持 enc/dec(加密/解密)、cfg(配置查看)、rudi(依赖注入代码生成)等子命令
2. **rulog** - 日志模块,基于 flexi_logger 实现,支持日志分级(info/error/debug)、文件轮转、控制台输出
3. **rudi** - 依赖注入(DI)模块,类似 Java Spring IoC 容器,支持单例/多例注册、全局 Bean 获取、自动代码生成
4. **rucfg** - 配置管理模块,基于 YAML 配置文件,支持多环境切换(dev/test/prod),使用 spicex 解析环境变量
根据对代码库的深入分析,以下是 `ruwebframe` 四大核心模块的功能清单:
---
## ruwebframe 功能清单
**ruwebframe** 是一个基于 Rust(actix-web)的 Web 应用开发框架,定位为"工业级世匠、开发者神器",对标 Go 的 goweb3 框架。
---
### 1. rucmd — 命令行工具模块
[rucmd.rs](file:///E:/soft/gitee.com/ruwebframe/src/rucmd/rucmd.rs)
提供统一的命令行入口,支持以下子命令:
| 子命令 | 功能 | 说明 |
|--------|------|------|
| `enc` | 加密 | 调用 `ruenc` 模块对字符串进行加密 |
| `dec` | 解密 | 调用 `ruenc` 模块对字符串进行解密 |
| `cfg` | 查看配置 | 读取并打印当前 YAML 配置的 JSON 格式 |
| `rudi list` | 列出结构体 | 扫描 `./src` 下所有 Rust 结构体 |
| `rudi all` | 批量生成 DI | 为所有结构体自动生成 `_init.rs` 依赖注入代码 |
| `rudi <name>` | 单个生成 DI | 为指定名称的结构体生成 `_init.rs` |
| `help` | 帮助 | 打印帮助信息 |
| `version` | 版本 | 打印版本信息 |
核心设计:通过 `ctor` 机制在程序启动时自动注册为单例 Bean,存入全局 DI 容器。
---
### 2. rulog — 日志模块
[rulog.rs](file:///E:/soft/gitee.com/ruwebframe/src/rulog/rulog.rs)
基于 `flexi_logger` 实现的企业级日志系统:
| 功能 | 说明 |
|------|------|
| **日志分级** | 支持 `info`、`error`、`debug` 三个级别 |
| **双输出** | 同时输出到控制台(`println!`)和日志文件 |
| **文件轮转** | 单文件超过 50MB 自动轮转,保留最近 5 个归档 |
| **自定义格式** | `[2026-08-01 14:30:25.123] [INFO] module:line - message` |
| **日志路径** | 统一输出到 `./logs/app.log` |
| **便捷函数** | `info()`、`error()`、`debug()`、`info2()`、`error2()`、`debug2()` |
| **LogInfo 辅助** | 支持链式拼接日志信息,通过 `LogInfo` 结构体合并多个日志段 |
通过 `OnceLock` 实现日志配置的全局懒加载,确保整个应用生命周期内只初始化一次。
---
### 3. rudi — 依赖注入(DI)模块
[mod.rs](file:///E:/soft/gitee.com/ruwebframe/src/rudi/mod.rs)
对标 Java Spring IoC 容器的 Rust 实现,是整个框架的核心基础设施:
| 子模块 | 功能 | 说明 |
|--------|------|------|
| **dicontainer** | IoC 容器核心 | `Container` 结构体,支持 `Factory`(多例)和 `Singleton`(单例)两种模式 |
| **direg** | 全局静态门面 | 基于 `OnceLock<RwLock<Container>>` 提供全局唯一容器,任意位置可通过 `get_bean::<T>(key)` 获取 Bean |
| **difactroy** | DI 代码工厂 | 自动扫描 `./src` 下所有 `.rs` 文件中的结构体,通过 AST 解析后自动生成 `_init.rs` 依赖注入代码 |
| **ditemplate** | 模板引擎 | 将 `struct_init.template` 模板文件与结构体信息结合,渲染生成初始化代码 |
| **ditrait** | 容器抽象层 | `BeanRegistry` trait 定义容器行为规范,便于扩展和 mock |
| **ruast** | AST 解析 | 基于 `syn` crate 解析 Rust 源码,提取结构体和 trait 信息 |
| **didto** | 数据传输对象 | `StructInfo` 等 DTO,承载结构体元信息用于代码生成 |
**设计亮点**:
- 线程安全:`Arc + Mutex + RwLock + OnceLock`
- 编译期自动注册:`ctor` + `inventory` 机制
- 零配置启动:一行 `#[ctor(unsafe)]` 即可自动注册 Bean
---
### 4. rucfg — 配置管理模块
[ruconfig.rs](file:///E:/soft/gitee.com/ruwebframe/src/rucfg/ruconfig.rs)
基于 YAML 的多环境配置管理系统:
| 功能 | 说明 |
|------|------|
| **多环境切换** | 通过 `env.yml` 中的 `Env` 字段,自动加载 `ichub-{env}.yml`(如 `ichub-dev.yml`、`ichub-postgres.yml`) |
| **环境变量解析** | 支持 `${VAR_NAME}` 语法,运行时替换环境变量 |
| **YAML → JSON** | 提供 `read2json()` 方法将配置转为 JSON 字符串 |
| **环境判断** | `ifDev()`、`ifTest()`、`ifMaster()` 等便捷函数 |
| **配置结构** | 包含 `software`(软件信息)、`database`(数据库)、`redis`、`web`(服务器配置)等完整 DTO |
| **线程安全** | 使用 `Arc<Mutex<CfgDto>>` 保证并发读取安全 |
| **懒加载** | 首次访问时解析配置文件,之后直接返回缓存 |
**配置解析链**:`env.yml → Env 字段 → 拼接文件名 → 解析 YAML → 替换环境变量 → CfgDto`
---
### 模块依赖关系
```
rucmd ──→ rucfg (读配置)
──→ rulog (打日志)
──→ rudi (代码生成)
──→ ruenc (加解密)
rudi ──→ rulog (打日志)
──→ rucfg (读配置模板)
所有模块 ──→ rudi/direg (全局 DI 容器,统一管理 Bean)
```
四个模块协同工作,共同构成了 ruwebframe 的核心基础设施层。