【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-coreBean 操作、日期、反射、字符串~600KB
HTTPhutool-httpHTTP 请求、下载~200KB
JSONhutool-jsonJSON 解析~150KB
加密hutool-cryptoMD5、AES、RSA~300KB
文件hutool-extraFTP、二维码、邮件~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);

四、优缺点分析

优点

  1. 开发效率极高:一行代码顶十几行原生写法
  2. API 设计友好:方法名直观,如 StrUtil.isBlank()CollUtil.isEmpty()
  3. 中文文档完善:每个方法都有详细注释和示例
  4. 社区活跃:GitHub Star 28k+,问题响应快

缺点

  1. 太重hutool-all 可能引入无用功能
  2. 版本兼容问题:5.x 与 4.x 部分 API 有 breaking change
  3. 企业级项目慎用:部分工具类(如 HTTP)不如专业库(OkHttp)健壮
  4. 静态方法不利于测试:难以 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 个月一个小版本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值