Hutool 依赖详解
一、Hutool 是什么?
Hutool = Hu(公司名)+ tool(工具),是一个国产开源的 Java 工具类库,目标是让开发者"避免重复造轮子",通过静态方法封装简化开发。
核心特点:
- 零依赖(除
hutool-all外,各模块独立) - 方法丰富(cover 日常开发 90% 场景)
- 上手简单(静态方法调用,无需初始化)
- 源码注释全中文(国人友好)
二、常用依赖模块
方式一:全量引入(推荐新手)
包含所有功能,但体积较大(~3MB)
<!-- Maven -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.26</version>
</dependency>
// Gradle
implementation 'cn.hutool:hutool-all:5.8.26'
方式二:按需引入(推荐生产环境)
只引入需要的模块,避免依赖冗余
| 模块 | ArtifactID | 功能 | 体积 |
|---|---|---|---|
| 核心 | hutool-core | Bean 操作、日期、反射、字符串 | ~600KB |
| HTTP | hutool-http | HTTP 请求、下载 | ~200KB |
| JSON | hutool-json | JSON 解析 | ~150KB |
| 加密 | hutool-crypto | MD5、AES、RSA | ~300KB |
| 文件 | hutool-extra | FTP、二维码、邮件 | ~500KB |
| 缓存 | hutool-cache | 简单缓存实现 | ~50KB |
示例:只引入核心和 JSON
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>5.8.26</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-json</artifactId>
<version>5.8.26</version>
</dependency>
三、典型应用场景 & 代码示例
场景 1:字符串判空
// 原生写法
if (str == null || str.trim().isEmpty()) { ... }
// Hutool 写法
if (StrUtil.isBlank(str)) { ... } // 判空 + 去空格
if (StrUtil.isNotEmpty(str)) { ... } // 仅判空
场景 2:日期处理
// 格式化
String dateStr = DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss");
// 计算相差天数
long between = DateUtil.betweenDay(startDate, endDate, true);
// 获取昨天
Date yesterday = DateUtil.yesterday();
场景 3:Bean 转 Map
User user = new User("张三", 25);
Map<String, Object> map = BeanUtil.beanToMap(user);
// 结果:{name=张三, age=25}
场景 4:JSON 解析
String jsonStr = "{\"name\":\"张三\",\"age\":25}";
// 转对象
User user = JSONUtil.toBean(jsonStr, User.class);
// 获取字段(无需建对象)
JSONObject json = JSONUtil.parseObj(jsonStr);
String name = json.getStr("name");
场景 5:MD5 加密
// 简单加密
String md5 = SecureUtil.md5("123456");
// 加盐加密
String md5Salt = SecureUtil.md5("123456" + "salt");
场景 6:文件操作
// 复制文件
FileUtil.copy("source.txt", "dest.txt", true);
// 读取为字符串
String content = FileUtil.readUtf8String("test.txt");
// 写入文件
FileUtil.writeUtf8String("Hello", "hello.txt");
场景 7:生成唯一 ID
// UUID 无横线
String id = IdUtil.simpleUUID(); // e.g. 8ddda2937e324198b43865e4d743be35
// 雪花算法
long snowflakeId = IdUtil.getSnowflake().nextId();
场景 8:HTTP 请求
// GET 请求
String result = HttpUtil.get("https://www.baidu.com");
// POST JSON
String json = "{\"key\":\"value\"}";
String postResult = HttpUtil.post("https://httpbin.org/post", json);
四、优缺点分析
优点
- 开发效率极高:一行代码顶十几行原生写法
- API 设计友好:方法名直观,如
StrUtil.isBlank()、CollUtil.isEmpty() - 中文文档完善:每个方法都有详细注释和示例
- 社区活跃:GitHub Star 28k+,问题响应快
缺点
- 太重:
hutool-all可能引入无用功能 - 版本兼容问题:5.x 与 4.x 部分 API 有 breaking change
- 企业级项目慎用:部分工具类(如 HTTP)不如专业库(OkHttp)健壮
- 静态方法不利于测试:难以 Mock(可通过封装解决)
五、使用建议
| 项目类型 | 推荐 | 理由 |
|---|---|---|
| 个人项目/快速原型 | hutool-all | 快速开发,不用纠结 |
| 中小型公司项目 | 按需引入 | 控制依赖,保持轻量 |
| 大厂核心系统 | 谨慎使用 | 用专业库替代(如 Guava、Apache Commons) |
| 工具类模块 | 强烈推荐 | 避免重复造轮子 |
最佳实践:
// 推荐:封装一层
@Component
public class IdGenerator {
public String nextId() {
return IdUtil.simpleUUID(); // 方便后续替换实现
}
}
// 不推荐:在业务代码中直接调用
String id = IdUtil.simpleUUID(); // 难以单元测试
六、版本选择
- 稳定版:
5.8.26(截至 2024 年底最新稳定版) - 注意:4.x 版本已停止维护,新项目务必用 5.x
- 更新频率:约 1-2 个月一个小版本
1万+

被折叠的 条评论
为什么被折叠?



