# quickstart
**Repository Path**: feizns/quickstart
## Basic Information
- **Project Name**: quickstart
- **Description**: 一个以实用、优雅、易用为目标的现代 Java 开发工具组件库
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: http://doc.quickstart.ls-mxinfo.cn
- **GVP Project**: No
## Statistics
- **Stars**: 8
- **Forks**: 2
- **Created**: 2022-09-19
- **Last Updated**: 2026-08-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# QuickStart
**一个以实用、优雅、易用为目标的现代 Java 开发工具组件库**
[](https://www.java.com)
[](https://spring.io/projects/spring-boot)
[](LICENSE)
---
QuickStart 是一套现代 Java 开发工具组件库,按需引入,提供 Bean 操作、类型转换、声明式连表、通用查询 DSL、Web 增强、数据校验等基础能力,以及多种第三方服务集成。
📖 **[在线文档](http://doc.quickstart.ls-mxinfo.cn/)**
---
## 📖 简介
### 项目定位
QuickStart 对 Spring Boot、MyBatis-Flex 等常用框架进行增强,封装样板代码、提供默认契约和自动配置,覆盖基础能力、ORM、Web、Redis、第三方集成等多个场景,能够极大地提高开发效率和开发体验。
### 核心特征
- **轻量** — 只做增强,不做改变。基于常用框架构建,不替换底层实现
- **实用** — 围绕真实开发场景设计,提供声明式连表、通用查询 DSL、统一响应等企业级能力
- **优雅** — API 设计追求直观和一致性,`@Relate` 一行搞定关联查询,`Entities.getById()` 比手写 SQL 更清晰
- **易用** — 开箱即用,约定优于配置。引入 starter 即可自动装配
- **强大** — 6 种连表策略、30+ 查询操作符、关系表操作,各种复杂查询需求都能轻松驾驭
- **可扩展** — 基于 SPI 机制,ORM 实现、缓存策略、加密算法等均可插拔替换
### 适用场景
- 中后台管理系统(ERP、CRM、OA 等)
- RESTful API 服务开发
- 需要统一查询协议的前后端分离项目
- 需要快速集成支付宝、OSS 等第三方服务的项目
- 基于 MyBatis-Flex 的数据密集型应用
---
## 🚀 快速开始
### 环境要求
- JDK 17+
- Maven 3.6+
- MySQL 5.7+
### 场景 1:REST 响应与异常
纯 Web 场景,无数据库依赖。展示统一响应格式、业务错误码声明、异常抛出与自动转换。
**依赖**
```xml
com.gitee.feizns
quickstart-web-spring-boot-starter
3.0.2-RELEASE
```
**代码**
```java
// 声明业务错误码常量
public class Codes {
public static final ResponseStatus USERNAME_EXISTS = Ret.ok().code(10001).msg("用户名已存在");
public static final ResponseStatus EMAIL_EXISTS = Ret.status(HttpStatus.BAD_REQUEST).code(10002).msg("邮箱已存在");
}
@RestController
@RequestMapping("/api/user")
public class UserController {
@GetMapping("/{id}")
public Ret getById(@PathVariable Long id) {
User user = userService.findById(id);
if (user == null)
throw new NotFoundException("用户不存在"); // HTTP 异常 → 404
return Ret.ok(userService.toVo(user));
}
@PostMapping
public Ret create(@Validated @RequestBody UserCreateAo ao) {
if (userService.existsByUsername(ao.getUsername()))
throw new BusinessException(Codes.USERNAME_EXISTS); // 业务异常 → 自定义错误码
return Ret.ok(userService.create(ao));
}
}
```
**说明**
- `Ret.ok(data)` → `{code: 200, msg: "ok", data: ...}`,HTTP 200
- **自定义错误码**:常量类定义 `ResponseStatus` 常量,传入 `BusinessException`
- **HTTP 异常**:`NotFoundException` → 404,`BadRequestException` → 400 等,自动映射HTTP状态码
详见 [统一响应](docs/guide/unified-response.md) | [全局异常](docs/guide/unified-exception.md)
---
### 场景 2:Web + 数据库 CRUD
`Entities` 是实体操作门面,可直接在任意地方使用,无需注入。底层通过 `EntitiesService` 接口针对不同持久层框架抽象常规操作,示例中由 `quickstart-mybatis-flex-spring-boot-starter` 提供实现。
**依赖**
```xml
com.gitee.feizns
quickstart-web-spring-boot-starter
3.0.2-RELEASE
com.gitee.feizns
quickstart-mybatis-flex-spring-boot-starter
3.0.2-RELEASE
```
**代码**
```java
@Validated
@RestController
@RequestMapping("/api/user")
public class UserController {
@GetMapping
public Ret> page(QueryAo ao) {
return Ret.ok(Entities.page(User.class, ao, UserVo.class));
}
@GetMapping("/{id}")
public Ret getById(@PathVariable Long id) {
return Ret.ok(Entities.getById(User.class, id, UserVo.class));
}
@PostMapping
public Ret create(@Validated @RequestBody UserCreateAo ao) {
return Ret.ok(Entities.save(User.class, ao));
}
@PatchMapping("/{id}")
public Ret patchById(@PathVariable Long id, @Validated @RequestBody UserPatchByIdAo ao) {
return Ret.ok(Entities.updateById(id, Beans.copy(ao, User.class)));
}
@DeleteMapping("/{id}")
public Ret deleteById(@PathVariable Long id) {
return Ret.ok(Entities.deleteById(User.class, id));
}
}
```
**说明**
- 支持 findById / getById / page / save / updateById / deleteById 等操作
- 动态查询:`QueryAo` 自动解析 URL 参数(GET)或请求体(POST),详见 [查询 DSL](#-查询-dsl)
- 推荐使用 [代码生成器](#-代码生成器) 一键生成 Controller / Service / Mapper / Ao / Vo
详见 [Entities](docs/guide/entities.md) | [快速开始](docs/guide/getting-started.md)
---
## 📦 核心功能
### 基础能力
提供 Bean 操作、反射增强、类型转换、缓存、加解密、异常处理、日期时间、树形构建等基础能力。
**核心工具示例**
```java
// Bean 复制
UserDTO dto = Beans.copy(user, UserDTO.class);
// 类型转换
int num = Converts.convert("12", int.class);
List list = Converts.asList(List.of("1", "2"), Integer.class);
// 本地缓存:缓存用户,5分钟过期,miss 时自动从数据库加载
CacheMap cache = Caches.builder()
.expireAfterWrite(Duration.ofMinutes(5))
.loader(key -> userService.getById(key))
.build();
// 异常捕获与重试
Try.run(() -> upload())
.ifSucceeded(result -> log.info("上传成功"))
.ifFailed(e -> log.error("上传失败", e))
.ifFailedRetry(3, IOException.class)
.get();
```
**工具清单**
| 工具 | 说明 |
|------|------|
| `Reflects` / `Methods` / `Fields` | 基于 MethodHandle 的高性能反射,Lambda 类型安全 |
| `Beans` / `Bean` | 高性能 Bean 元数据框架,支持 Lambda、泛型保留、Map 互转 |
| `Converts` | 类型转换系统,内置 30+ 转换器,支持泛型和自定义扩展 |
| `Caches` / `CacheMap` | 缓存工厂与带过期时间的缓存 Map |
| `Hashes` / `Aes` / `Rsa` | 加解密工具(MD5/SHA/AES/RSA) |
| `Trees` | 树形构建(平面列表 → 树 / 递归遍历 / 展平) |
| `Try` / `RetryPolicy` | 异常捕获 + 声明式重试 |
| `Times` / `Dates` | 日期时间工具(智能解析、周期边界计算) |
| `Maps` / `Lists` / `Strings` | 集合、字符串、数值工具 |
| `Regexps` | 常用正则表达式(手机号、身份证、邮箱、IP 等) |
详见 [基础能力概述](docs/guide/core-overview.md) | [Bean 操作](docs/guide/bean-operations.md) | [反射增强](docs/guide/reflection.md) | [类型转换](docs/guide/type-conversion.md)
---
### 查询 DSL
提供 30+ MongoDB 风格操作符,GET 和 POST 使用统一的查询语法。GET 请求支持扁平化 URL 参数,前端友好。
**查询示例**
```
// 条件查询(扁平语法)
GET /api/user?name[$ct]=张&age[$gt]=18 → name LIKE '%张%' AND age > 18
// 条件查询(JSON 查询)
GET /api/user?name={"$ct":"张"}&age={"$gt":18} → name LIKE '%张%' AND age > 18
// 排序
GET /api/user?$sort=name,-createTime → ORDER BY name ASC, create_time DESC
// 分页
GET /api/user?$current=1&$size=10 → LIMIT 0, 10
```
**常用操作符**
| 分类 | 操作符 | 示例 |
|------|--------|------|
| 比较 | `$eq` `$ne` `$gt` `$ge` `$lt` `$le` | `{"age": {"$ge": 18}}` |
| 集合 | `$in` | `{"status": {"$in": [1,2]}}` |
| 范围 | `$bt` | `{"age": {"$bt": [18,60]}}` |
| 字符串 | `$ct` `$sw` `$ew` `$rgx` | `{"name": {"$ct": "admin"}}` |
| 日期 | `$year` `$month` `$day` 等 | `{"createTime[$year]": 2026}` |
| 逻辑 | `$and` `$or` `$not` | `{"$or": [{"age":18},{"age":20}]}` |
| 配置 | `$sort` `$limit` `$skip` `$f` `$q` | `{"$sort": ["name", "-age"]}` |
**GET 请求扁平化语法**
| URL 参数 | 解析结果 |
|---------|---------|
| `?name=foo` | `{"name": "foo"}`(自动 `$eq`) |
| `?tags=a,b,c` | `{"tags": ["a", "b", "c"]}`(自动拆分) |
| `?age[$gt]=18` | `{"age": {"$gt": 18}}`(方括号操作符) |
| `?createTime[$year]=2026` | `{"createTime": {"$year": 2026}}` |
详见 [查询 DSL 概述](docs/guide/query-dsl.md) | [查询对象](docs/guide/query-dsl-query-ao.md) | [操作符一览](docs/guide/query-dsl-operators.md)
---
### Web 增强
提供统一响应、全局异常处理、限流防重、加解密等 Web 开发常用功能。
**统一响应 Ret<T>**
```java
return Ret.ok(data);
return Ret.ok(() -> userService.findAll()); // 使用 Supplier 返回数据
return Ret.ok().code(10001).msg("操作成功").data(result);
Ret.badRequest("参数错误"); // 400
Ret.unauthorized("未认证"); // 401
Ret.forbidden("无权限"); // 403
Ret.notFound("资源不存在"); // 404
Ret.error("系统异常"); // 500
```
**全局异常处理**
- **异常链匹配**:递归遍历异常链(cause 优先匹配),而非仅匹配表面异常
- **继承体系查找**:在异常继承链中查找处理器
- **可注册自定义处理器**
```java
// 注册自定义异常处理器
handler.registry(CustomException.class, ex -> Ret.error(ex.getMessage()));
```
**限流 & 防重**
```java
@RateLimit(qps = 60) // 每秒 60 次
@RepeatGuard(interval = 3) // 3 秒内防重复提交
```
详见 [Web 概述](docs/guide/web-overview.md) | [统一响应](docs/guide/unified-response.md) | [全局异常](docs/guide/unified-exception.md) | [限流防重](docs/guide/rate-limiting.md)
---
### 数据校验
提供 13 个自定义校验注解和编程式校验能力。
**自定义校验注解**
| 注解 | 说明 |
|------|------|
| `@Identifier` | 标识符格式(中文/字母/数字/下划线/连字符) |
| `@JavaIdentifier` | Java 标识符格式 |
| `@Phone` | 手机号格式 |
| `@IdCard` | 身份证号格式 |
| `@EnumValue` | 值必须在指定枚举中 |
| `@DictValue` | 值在字典中 |
| `@DateRange` | 日期范围(支持字段级和类级) |
| `@Verify` | 触发 Verifiable 接口校验 |
| `@VerifyWith` | 触发外部 Validator 校验 |
| `@NoWhitespace` | 不允许空白字符 |
| `@NoNullElements` | 集合中不允许 null 元素 |
| `@Words` / `@ProvidedWords` | 值在静态/动态词库中 |
**@DateRange 用法**
```java
// 字段级:日期在范围内
@DateRange(min = "2024-01-01", max = "2024-12-31")
private LocalDate eventDate;
// 类级:start 字段早于 end 字段
@DateRange(start = "startDate", end = "endDate")
public class EventDto {
private LocalDate startDate;
private LocalDate endDate;
}
```
**Verifiable — 编程式校验**
```java
@Data
@Verify
public class UserCreateAo implements Verifiable {
private String name;
private Integer age;
private String password;
private String confirmPassword;
@Override
public void validate(Rejects rejects) {
rejects.when(this.age < 0, "年龄不能为负数");
rejects.when(!this.password.equals(this.confirmPassword),
"confirmPassword", "两次密码不一致");
rejects.ifNull(this.name, "name", "用户名不能为空");
}
}
```
**Validator — 外部验证器**
```java
// 定义验证器
public class PasswordMatchValidator implements Validator {
@Override
public void validate(Rejects rejects, PasswordDto value) {
if (!Objects.equals(value.getPassword(), value.getConfirmPassword()))
rejects.reason("confirmPassword", "两次密码不一致");
}
}
// 使用 @VerifyWith 引用
@Data
@VerifyWith(PasswordMatchValidator.class)
public class PasswordDto {
private String password;
private String confirmPassword;
}
```
**国际化支持**
校验消息自动支持国际化,默认英文,中文通过 `ValidationMessages_zh_CN.properties` 配置。
使用 `Messages` 工具类在业务代码中获取国际化消息:
```java
// 使用当前 Locale
String msg = Messages.get("error.user.notFound");
// 指定 Locale(后台任务、邮件发送等)
String msg = Messages.get(Locale.CHINA, "error.user.notFound");
```
详见 [校验概述](docs/guide/validation-overview.md) | [校验注解](docs/guide/validation-annotations.md) | [编程式校验](docs/guide/programmatic-validation.md)
---
### MyBatis-Flex
提供 `quickstart-orm` 的 MyBatis-Flex 实现,包括 Entities 门面、@Relate 声明式连表、Relation 关系表、DDL 自动建表等。
**Entities — 统一数据库访问**
```java
// 静态方式
User user = Entities.getById(User.class, 1L);
List users = Entities.list(User.class, queryAo);
PageRecordsVo page = Entities.page(User.class, queryAo);
// 实例方式(推荐)
Entity userEntity = Entities.of(User.class);
User user = userEntity.getById(1L);
userEntity.updateById(1L, u -> u.setStatus("active"));
// Lambda 查询
String name = Entities.find(User::getName)
.eq(User::getStatus, 1)
.gt(User::getAge, 18)
.first();
```
**@Relate 声明式连表**
在 VO 字段上标注 `@Relate`,自动根据注解声明的关系查询并组装关联数据。支持 6 种查询策略(AUTO / LEFT_JOIN / INNER_JOIN / SUBQUERY / SEPARATE / COUNT)。配合 `$f` 操作符可按需加载关联字段,未指定的关联不生成 SQL,显著提升性能。
```java
public class UserVo {
// 一对一:查询创建者(默认 LEFT JOIN)
@Relate(selfKey = "creatorId", target = Admin.class)
private Admin creator;
// 一对多(中间表):通过 admin_role 关联表查角色(默认 SEPARATE)
@Relate(target = Role.class)
@With(through = AdminRole.class, selfKey = "adminId", targetKey = "roleId")
private List roles;
// 计数
@Relate(target = Role.class, strategy = RelateStrategy.COUNT)
@With(through = AdminRole.class, selfKey = "adminId", targetKey = "roleId")
private int roleCount;
}
// 全量查询(加载所有关联字段)
Entities.getById(User.class, 1L, UserVo.class);
// 按需查询:只加载基础字段和 creator,不加载 roles
QueryAo ao = QueryAo.builder().$f("id", "name", "creator").build();
Entities.list(User.class, ao, UserVo.class);
```
**Relation — 关系表操作**
```java
Relation relation = Relations.of(AdminRole::getAdminId, AdminRole::getRoleId);
relation.add(adminId, List.of(roleId1, roleId2)); // 添加(自动去重)
relation.reset(adminId, newRoleIds); // 智能同步(差异对比)
relation.clear(adminId); // 清空
relation.remove(adminId, List.of(roleId1)); // 删除指定
relation.list(adminId); // 查询关系列表
relation.list(adminId, Role.class); // 查询关联角色
relation.copy(srcAdminId, tgtAdminId); // 复制关系
```
详见 [MyBatis-Flex 概述](docs/modules/mybatis-flex.md) | [Entities](docs/guide/entities.md) | [@Relate](docs/guide/relate-deep-dive.md) | [Relation](docs/guide/relation-api.md) | [DDL](docs/guide/ddl-auto.md)
---
### Jackson 增强
提供 Jackson JSON 处理的增强功能,包括工具类、自定义注解、JsonValue 接口等。
**核心功能**
- `Jacksons` 工具类 — 简化 JSON 序列化/反序列化
- `@JsonArrayAsObject` — 数组转对象
- `@JsonDeduplicate` — JSON 去重
- `JsonValue` 接口 — 枚举值映射
详见 [Jackson 概述](docs/guide/jackson-overview.md) | [Jacksons 工具](docs/guide/jacksons-tool.md) | [JSON 注解](docs/guide/json-annotations.md)
---
### Redis 封装
提供 Redis 命令式 API、分布式锁、Hash/Set/SortedSet 结构化封装。
**核心功能**
- **静态 API** — 简化 Redis 操作
- **分布式锁** — 基于 Redis 的分布式锁实现
- **集合接口** — RedisHashMap / HashSet / RedisSortedSet,用 Java 的方式操作 Redis
详见 [Redis 概述](docs/guide/redis-overview.md) | [静态 API](docs/guide/redis-static-api.md) | [分布式锁](docs/guide/redis-lock.md) | [集合接口](docs/guide/redis-collections.md)
---
### 开发工具
提供代码生成器、Excel 处理、文件存储、二维码、验证码、规则引擎等开发工具。
**代码生成器**
从一个 POJO 生成 Controller / Service / Mapper / Ao / Vo 全套代码:
```java
@Comment("用户")
public class User {
@Comment("用户名") private String username;
@Comment("年龄") private Integer age;
public static void main(String[] args) {
CodeGenerator.of(User.class)
.register(Templates.springboot3MybatisFlex(Methods.crudById()))
.generate();
// 自动生成:Controller、Service、ServiceImpl、Mapper、CreateAo、PatchByIdAo、Vo(共 7 个文件)
}
}
```
**其他工具**
| 工具 | 说明 |
|------|------|
| `quickstart-easyexcel` | Excel 处理(支持 LocalDate/LocalDateTime) |
| `quickstart-file-storage` | 统一文件存储抽象 |
| `quickstart-zxing` | 二维码/条形码生成 |
| `quickstart-easy-captcha` | 验证码生成(数字/字符/中文/算术等 6 种) |
| `quickstart-ql-express` | 阿里规则引擎 QLExpress 封装 |
| `quickstart-javacv` | JavaCV 音视频处理 |
| `quickstart-graalvm-js` | GraalVM JavaScript 引擎 |
详见 [代码生成器](docs/modules/code-generator.md) | [EasyExcel](docs/modules/easyexcel.md) | [文件存储](docs/modules/file-storage.md)
---
### 第三方集成
提供支付宝、阿里云 OSS、MQTT、宝塔面板等第三方服务集成。
| 模块 | 说明 |
|------|------|
| `quickstart-alipay` | 支付宝 SDK(App 支付、网站支付、单笔转账) |
| `quickstart-aliyun-oss` | 阿里云 OSS(上传、下载、签名 URL) |
| `quickstart-mqtt` | MQTT 消息队列(发布、订阅、连接管理) |
| `quickstart-bt` | 宝塔面板 SDK(文件管理、Java 项目部署) |
详见 [支付宝](docs/modules/alipay.md) | [阿里云 OSS](docs/modules/aliyun-oss.md) | [MQTT](docs/modules/mqtt.md) | [宝塔](docs/modules/bt.md)
---
### 其他模块
| 模块 | 说明 |
|------|------|
| `quickstart-domain` | 通用领域模型(Id、Coded、TreeNode) |
| `quickstart-log` | 日志增强(@Log 业务操作日志、LogContext 日志上下文、LogListener 监听器) |
| `quickstart-mustache` | Mustache 模板引擎 |
| `quickstart-ddl-annotation` | DDL 注解、自动建表 |
| `quickstart-spring` | Spring 容器工具 |
| `quickstart-spring-expression` | Spring 表达式增强 |
---
## 📋 模块一览
| 分类 | 模块 | 功能 | 适用场景 |
|------|------|------|---------|
| **基础** | [quickstart-core](quickstart-core/) | Bean 元数据、类型转换、反射、缓存 Map、加解密、Try 重试、树形构建 | 所有项目 |
| | [quickstart-domain](quickstart-domain/) | Coded 契约、Id 标识、TreeNode 通用模型 | Web / ORM |
| | [quickstart-dsl](quickstart-dsl/) | QueryAo 查询 DSL(30+ 操作符)、PageAo 分页模型 | 查询 / 分页 |
| | [quickstart-orm](quickstart-orm/) | Entities 门面、@Relate 声明式连表、Relation 关系表 | ORM 抽象层 |
| | [quickstart-spring](quickstart-spring/) / [quickstart-spring-expression](quickstart-spring-expression/) | Spring 容器工具、表达式增强 | Spring 项目 |
| **数据** | [quickstart-mybatis-flex](quickstart-mybatis-flex/) | MyBatis-Flex 实现、实体基类、自动建表、JSON 类型处理器 | MyBatis-Flex |
| | [quickstart-redis](quickstart-redis/) | Redis 命令式 API、分布式锁、Hash/Set/SortedSet 结构化封装 | 缓存 / 分布式 |
| **Web** | [quickstart-web](quickstart-web/) | Ret 统一响应、异常体系、QueryAo 参数解析、@RateLimit / @RepeatGuard / @CryptoBody | Web API |
| | [quickstart-validation](quickstart-validation/) | @Phone / @IdCard / @DateRange / @EnumValue 等 13 个校验注解、Verifiable 编程式校验、Validator 外部验证器、国际化支持 | 数据校验 |
| | [quickstart-log](quickstart-log/) | @Log 业务操作日志、LogContext 日志上下文、LogListener 监听器 | 日志 |
| **JSON** | [quickstart-jackson](quickstart-jackson/) | @JsonArrayAsObject、@JsonDeduplicate | JSON 处理 |
| **工具** | [quickstart-code-generator](quickstart-code-generator/) | 代码生成器,POJO → Controller / Service / Ao / Vo 全套 | 快速开发 |
| | [quickstart-easyexcel](quickstart-easyexcel/) | Excel 处理(支持 LocalDate / LocalDateTime) | 导入导出 |
| | [quickstart-easy-captcha](quickstart-easy-captcha/) / [quickstart-zxing](quickstart-zxing/) | 验证码 / 二维码 | 通用 |
| | [quickstart-file-storage](quickstart-file-storage/) | 统一文件存储抽象 | 文件管理 |
| | [quickstart-ql-express](quickstart-ql-express/) / [quickstart-graalvm](quickstart-graalvm/) / [quickstart-graalvm-js](quickstart-graalvm-js/) | 规则引擎 / 多语言脚本 | 动态逻辑 |
| | [quickstart-javacv](quickstart-javacv/) | 音视频处理 | 媒体 |
| | [quickstart-ddl-annotation](quickstart-ddl-annotation/) | DDL 注解、自动建表 | 数据库 |
| **第三方** | [quickstart-alipay](quickstart-alipay/) / [quickstart-aliyun-oss](quickstart-aliyun-oss/) / [quickstart-mqtt](quickstart-mqtt/) / [quickstart-bt](quickstart-bt/) | 支付宝 / OSS / MQTT / 宝塔 | 第三方集成 |
| **Starter** | 各 `*-spring-boot-starter` | web / mybatis-flex / redis / validation / log / mqtt / jackson 自动配置 | 按需引入 |
---
## 📚 最佳实践
- **代码生成实战** — 从 POJO 到完整 CRUD 的最佳实践
- **生产部署指南** — 生产环境配置、性能优化、监控建议
- **性能优化** — 缓存策略、查询优化、批量操作技巧
详见 [代码生成实战](docs/best-practices/code-generation.md) | [生产部署](docs/best-practices/deployment.md) | [性能优化](docs/best-practices/performance.md)
---
## 📄 许可证
QuickStart 采用 Apache License 2.0 开源协议。详情参见 [LICENSE](LICENSE) 文件。
---
## 📬 联系方式
- **作者**:feizns
- **Gitee**:https://gitee.com/feizns/quickstart
- **在线文档**:http://doc.quickstart.ls-mxinfo.cn/
---
> 模块按需引入,不依赖全部加载,每一层都可独立使用。