# RuoYi-Vue 架构概览 > **项目版本**: 3.8.0 | **分析日期**: 2026-06-28 > **前端**: Vue 2.6.12 + Element UI 2.15.6 | **后端**: Spring Boot 2.5.8 + JDK 1.8 --- ## 1. 系统总体架构 ### 1.1 系统架构图 ``` ┌─────────────────────────────────────────────────────────────────────────┐ │ 浏览器客户端 │ │ ┌───────────────────────────────────────────────────────────────────┐ │ │ │ 前端层 (Vue 2 SPA) │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │ │ │ │ │ Views │ │ Layout │ │ Store │ │ Router │ │ Components │ │ │ │ │ │ (40+页) │ │(侧边栏/ │ │ (Vuex 5 │ │(静态+ │ │ (22个组件组)│ │ │ │ │ │ │ │ 标签页) │ │ modules)│ │动态路由) │ │ │ │ │ │ │ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └──────┬──────┘ │ │ │ │ └───────────┴───────────┴───────────┴─────────────┘ │ │ │ │ │ │ │ │ │ ┌────────┴────────┐ │ │ │ │ │ Axios 封装层 │ ← 请求/响应拦截器、错误处理 │ │ │ │ └────────┬────────┘ │ │ │ └───────────────────────────┼───────────────────────────────────────┘ │ └──────────────────────────────┼──────────────────────────────────────────┘ │ HTTP/JSON (Bearer Token) ▼ ┌──────────────────────────────────────────────────────────────────────────┐ │ 后端服务层 │ │ ┌────────────────────────────────────────────────────────────────────┐ │ │ │ ruoyi-admin (启动层 & Controller 层 — 28 个 Controller) │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐ │ │ │ │ │ 系统管理(13) │ │ 监控管理(5) │ │ 业务模块(6) │ │ 工具/公共(4) │ │ │ │ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬───────┘ │ │ │ │ └───────────────┴───────────────┴───────────────┘ │ │ │ │ │ │ │ │ │ ┌─────────────────────────┴──────────────────────────────┐ │ │ │ │ │ ruoyi-framework (框架核心层) │ │ │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────┐ │ │ │ │ │ │ │ Security │ │ AOP 切面 │ │ Config │ │ Redis/JWT │ │ │ │ │ │ │ │ (认证/ │ │ (4个切面) │ │ (12个配置)│ │ (Token管理)│ │ │ │ │ │ │ │ 授权) │ │ │ │ │ │ │ │ │ │ │ │ │ └──────────┘ └──────────┘ └──────────┘ └───────────┘ │ │ │ │ │ └─────────────────────────┬──────────────────────────────┘ │ │ │ │ │ │ │ │ │ ┌──────────────┬───────┴───────┬──────────────┐ │ │ │ │ ▼ ▼ ▼ ▼ │ │ │ │ ┌──────┐ ┌──────────┐ ┌──────────┐ ┌────────────┐ │ │ │ │ │ruoyi │ │ book- │ │ stock- │ │ ruoyi- │ │ │ │ │ │system│ │ system │ │ system │ │ quartz │ │ │ │ │ │(12S │ │ (6S/6M) │ │ (9M) │ │ /generator │ │ │ │ │ │ 12M) │ │ │ │ │ │ │ │ │ │ │ └──────┘ └──────────┘ └──────────┘ └────────────┘ │ │ │ │ │ │ │ │ │ ┌─────────────────────────┴──────────────────────────────┐ │ │ │ │ │ ruoyi-common (通用工具层) │ │ │ │ │ │ BaseController / AjaxResult / BaseEntity / 注解 / │ │ │ │ │ │ 工具类(20+) / 异常类 / 过滤器 / 常量 / 分页组件 │ │ │ │ │ └────────────────────────────────────────────────────────┘ │ │ │ └────────────────────────────────────────────────────────────────────┘ │ └──────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────────────────┐ │ 数据层 │ │ ┌──────────────────────┐ ┌────────────────────────────┐ │ │ │ MySQL 数据库 │ │ Redis 缓存 │ │ │ │ ┌────────────────┐ │ │ ┌──────────────────────┐ │ │ │ │ │ sys_* 系统表 │ │ │ │ login_tokens:{uuid} │ │ │ │ │ │ book_* 账本表 │ │ │ │ 用户会话 / Token │ │ │ │ │ │ stock_* 股票表 │ │ │ ├──────────────────────┤ │ │ │ │ │ quartz_* 任务表 │ │ │ │ 限流计数器 │ │ │ │ │ │ gen_* 生成器表 │ │ │ ├──────────────────────┤ │ │ │ │ └────────────────┘ │ │ │ 配置缓存 / 字典缓存 │ │ │ │ └──────────────────────┘ │ └──────────────────────┘ │ │ │ └────────────────────────────┘ │ └──────────────────────────────────────────────────────────────────────────┘ ``` ### 1.2 分层说明 | 层级 | 职责 | 关键技术 | |------|------|---------| | **前端展示层** | 页面渲染、用户交互、路由导航、状态管理 | Vue 2 SPA、Element UI、Vuex、Vue Router | | **API 通信层** | 前后端 HTTP 通信、Token 携带、错误统一处理 | Axios + 拦截器、JWT Bearer Token | | **Controller 层** | 请求接收、参数校验、权限注解、响应封装 | Spring MVC、@PreAuthorize、@Log | | **框架核心层** | 安全认证、AOP 切面、数据源路由、全局配置 | Spring Security、JWT、AspectJ、Druid | | **Service 层** | 业务逻辑、事务管理、数据权限过滤 | @Transactional、@DataScope | | **Mapper 层** | SQL 映射、动态查询、结果集映射 | MyBatis + XML + PageHelper | | **Domain 层** | 实体模型、基类继承、VO/DTO 传输 | BaseEntity、TreeEntity | | **数据存储层** | 持久化存储、会话缓存、限流计数 | MySQL 5.7+、Redis | --- ## 2. 技术栈总结 ### 2.1 前端技术栈 | 分类 | 技术 | 版本 | 用途 | |------|------|------|------| | 核心框架 | Vue.js | 2.6.12 | 渐进式 MVVM 框架 | | UI 组件库 | Element UI | 2.15.6 | 桌面端组件库 | | 路由管理 | Vue Router | 3.4.9 | SPA 路由(含动态路由) | | 状态管理 | Vuex | 3.6.0 | 集中式状态管理(5 个模块) | | HTTP 客户端 | Axios | 0.24.0 | HTTP 请求封装 | | 构建工具 | Vue CLI | 4.4.6 | 项目脚手架 | | CSS 预处理 | Sass | 1.32.13 | 样式预处理器 | | 图表库 | ECharts | 4.9.0 | 数据可视化 | | 富文本编辑器 | Quill | 1.3.7 | 富文本编辑 | | 代码高亮 | highlight.js | 9.18.5 | 代码语法高亮 | | 拖拽排序 | vuedraggable | 2.24.3 | 列表拖拽 | | SVG 图标 | svg-sprite-loader | 5.1.1 | SVG 雪碧图 | | 加密 | jsencrypt | 3.2.1 | RSA 密码加密 | | 进度条 | NProgress | 0.2.0 | 页面加载进度 | | Cookie | js-cookie | 3.0.1 | Cookie 读写 | ### 2.2 后端技术栈 | 分类 | 技术 | 版本 | 用途 | |------|------|------|------| | 核心框架 | Spring Boot | 2.5.8 | 快速开发框架 | | JDK | Java | 1.8 | 运行环境 | | 安全框架 | Spring Security | 内置 | 认证与授权 | | JWT | jjwt | 0.9.1 | Token 签发与验证 | | ORM | MyBatis | 2.2.0 (starter) | SQL 映射框架 | | 分页插件 | PageHelper | 1.4.0 | 物理分页 | | 连接池 | Druid | 1.2.8 | 数据库连接池 + 监控 | | 缓存 | Spring Data Redis | 内置 | 会话缓存、限流 | | API 文档 | Springfox Swagger 3 | 3.0.0 | 接口文档 | | JSON 解析 | FastJSON | 1.2.79 | JSON 序列化 | | Excel 处理 | Apache POI | 4.1.2 | Excel 导入导出 | | 验证码 | Kaptcha | 2.3.2 | 图形验证码 | | 代码生成 | Velocity | 2.3 | 模板引擎 | | 系统监控 | Oshi | 5.8.6 | 服务器信息采集 | | 定时任务 | Quartz | 内置 | 任务调度 | ### 2.3 数据库技术栈 | 技术 | 用途 | 说明 | |------|------|------| | MySQL 5.7+ | 主数据库 | 系统表(sys_*)、业务表(book_*/stock_*)、任务表(quartz_*) | | Redis | 缓存/会话 | Token 存储(login_tokens:{uuid})、限流计数器、配置缓存 | --- ## 3. 模块划分 ### 3.1 模块清单 | 模块名 | 类型 | 职责 | 核心内容 | |--------|------|------|----------| | **ruoyi-admin** | 启动模块 | Spring Boot 启动入口,Controller 层聚合 | 启动类、28 个 Controller、Swagger 配置、打包部署 | | **ruoyi-framework** | 框架核心 | 安全认证、AOP 切面、数据源、全局配置 | Security、JWT、4 个切面、12 个配置类、异步管理 | | **ruoyi-system** | 系统管理 | 系统基础业务 | 用户/角色/菜单/部门/字典/岗位/日志 (12 Service + 12 Mapper) | | **ruoyi-common** | 通用工具 | 基类、工具类、注解、异常、常量 | BaseController、AjaxResult、BaseEntity、20+ 工具类 | | **ruoyi-generator** | 代码生成 | Velocity 模板驱动的代码生成器 | 表结构查询、模板渲染、2 个 Mapper | | **ruoyi-quartz** | 定时任务 | 基于 Quartz 的任务调度管理 | 任务 CRUD、执行日志、2 个 Mapper | | **book-system** | 账本业务 | 账务管理业务模块 | 账户/账本/操作记录/统计 (6 Service + 6 Mapper) | | **stock-system** | 股票业务 | 股票分析业务模块 | 股票信息/行情/财务/趋势 (9 Mapper) | ### 3.2 模块依赖图 ``` ┌─────────────┐ │ ruoyi-admin │ ← 启动入口,打包部署 └──────┬──────┘ │ depends on ┌───────────────┼───────────────┐ ▼ ▼ ▼ ┌────────────┐ ┌────────────┐ ┌─────────────┐ │ ruoyi- │ │ ruoyi- │ │ ruoyi- │ │ system │ │ quartz │ │ generator │ └──────┬─────┘ └──────┬─────┘ └──────┬──────┘ │ │ │ ▼ ▼ ▼ ┌─────────────────────────────────────────────┐ │ ruoyi-framework │ │ (Security, AOP, DataSource, Redis, Config)│ └──────────────────────┬──────────────────────┘ │ depends on ┌───────────────┼───────────────┐ ▼ ▼ ▼ ┌────────────┐ ┌────────────┐ ┌─────────────┐ │ book- │ │ stock- │ │ ruoyi- │ │ system │ │ system │ │ common │ └────────────┘ └────────────┘ └─────────────┘ ``` **依赖规则**: - `ruoyi-admin` → 依赖所有业务模块 + framework - 业务模块 (`ruoyi-system` / `book-system` / `stock-system` / `quartz` / `generator`) → 依赖 `ruoyi-framework` - `ruoyi-framework` → 依赖 `ruoyi-common` - `ruoyi-common` → 无内部依赖(底层基础模块) --- ## 4. 关键设计模式 ### 4.1 MVC 模式 ``` Controller (ruoyi-admin) │ 接收请求、参数校验、权限控制 ▼ Service (各业务模块) │ 业务逻辑、事务管理 ▼ Mapper (各业务模块) │ SQL 映射、数据访问 ▼ Domain (ruoyi-common / 各模块) 实体模型、基类继承 ``` - **Controller**: 统一继承 `BaseController`,获得 `startPage()`、`getDataTable()`、`toAjax()` 等通用方法 - **Service**: 接口 + 实现分离 (`ISysUserService` / `SysUserServiceImpl`) - **Mapper**: MyBatis XML 映射 + Java 接口,大量使用动态 SQL - **Domain**: `BaseEntity` → `TreeEntity` 继承体系 ### 4.2 分层架构 **物理分层**(Maven 多模块)与 **逻辑分层**(Controller → Service → Mapper)相结合: ``` ┌───────────────────────────────────────────┐ │ ruoyi-admin → Controller 层 (表现层) │ ├───────────────────────────────────────────┤ │ ruoyi-framework → 框架支撑层 (横切关注点) │ ├───────────────────────────────────────────┤ │ ruoyi-system → Service/Mapper (业务层) │ │ book-system → Service/Mapper (业务层) │ │ stock-system → Service/Mapper (业务层) │ ├───────────────────────────────────────────┤ │ ruoyi-common → Domain/工具类 (基础层) │ └───────────────────────────────────────────┘ ``` ### 4.3 AOP 切面 | 切面 | 注解 | 通知类型 | 优先级 | 用途 | |------|------|---------|--------|------| | **DataSourceAspect** | `@DataSource` | `@Around` | `@Order(1)` | 多数据源动态切换 | | **DataScopeAspect** | `@DataScope` | `@Before` | — | 数据权限 SQL 注入 | | **LogAspect** | `@Log` | `@AfterReturning` / `@AfterThrowing` | — | 操作日志异步记录 | | **RateLimiterAspect** | `@RateLimiter` | `@Before` | — | Redis 限流控制 | ### 4.4 其他设计模式 | 模式 | 应用场景 | 实现方式 | |------|---------|---------| | **单例模式** | Spring Bean 默认作用域 | 配置类 (`SecurityConfig`、`DruidConfig` 等) 通过 `@Configuration` + `@Bean` 实现 | | **工厂模式** | 异步任务创建 | `AsyncFactory` 创建不同类型的异步任务(操作日志、登录日志) | | **策略模式** | 数据权限过滤 | `@DataScope` 注解根据不同数据范围类型(全部/本部门/本人等)生成不同的 SQL 过滤策略 | | **模板方法模式** | BaseController | 基类定义通用流程(分页、响应),子类 Controller 继承复用 | | **责任链模式** | Spring Security 过滤器链 | `CorsFilter → JwtAuthenticationTokenFilter → AuthenticationFilter` 依次处理 | | **代理模式** | MyBatis Mapper | MyBatis 通过动态代理生成 Mapper 接口实现 | | **观察者模式** | Spring 事件机制 | `AsyncManager` 通过线程池异步处理任务,解耦日志写入与主流程 | --- *文档结束*