拒绝重复造轮子!SpringBoot 内置的20个高效官方工具类详解

点击上方"程序员蜗牛g",选择"设为星标"

跟蜗牛哥一起,每天进步一点点

程序员蜗牛g

大厂程序员一枚 跟蜗牛一起 每天进步一点点

33篇原创内容

**

公众号

本项目是对 Spring Framework 内置的 20 个精选工具类的完整演示和深度解析。每个工具类都包含:

  • • ✅ 完整可运行的代码示例
  • • ✅ 实际应用场景演示
  • • ✅ 最佳实践和注意事项
  • • ✅ 与其他方案的对比说明

🎯 为什么使用 Spring 官方工具类?

  • 无额外依赖:Spring Boot 项目开箱即用
  • 深度框架集成:与 Spring AOP、IoC 等无缝协作
  • 异常处理完善 :自动处理 null、边界条件等陷阱
  • 性能优化:经 Spring 团队长期生产验证

🚀 快速开始

1. 克隆项目

bash 复制代码
git clone <repository-url>
cd springuitls

2. 运行演示

方式一:交互式菜单(推荐)
arduino 复制代码
mvn spring-boot:run

启动后会显示交互式菜单,可以选择运行单个或所有演示。

方式二:一次性运行所有演示
arduino 复制代码
mvn spring-boot:run -Dspring-boot.run.arguments="all"

📚 工具类清单

【核心工具】

1. StringUtils - 字符串处理终结者
  • 包路径org.springframework.util.StringUtils
  • 核心功能:字符串判空、去空格、路径处理
  • 常用方法
    • hasText() - 判断字符串是否有内容(自动 trim)
    • hasLength() - 判断字符串长度是否大于 0
    • getFilename() - 从路径提取文件名
    • arrayToCommaDelimitedString() - 数组转逗号分隔字符串

示例代码:

less 复制代码
// 安全判空(自动处理 null 和空格)
if (StringUtils.hasText(nickname)) {
    System.out.println("昵称有效: " + nickname.trim());
}

// 提取文件名
String filename = StringUtils.getFilename("/path/to/file.txt"); // file.txt

演示类: StringUtilsDemo.java


2. CollectionUtils - 集合操作防坑神器
  • 包路径org.springframework.util.CollectionUtils
  • 核心功能:集合判空、合并、查找
  • 常用方法
    • isEmpty() - 安全判空(自动处理 null)
    • firstElement() / lastElement() - 获取首尾元素
    • intersection() - 求交集

示例代码:

kotlin 复制代码
// 安全遍历集合
if (CollectionUtils.isEmpty(tags)) {
    System.out.println("无标签,跳过处理");
    return;
}
tags.forEach(tag -> System.out.println("处理标签: " + tag));

演示类: CollectionUtilsDemo.java


3. ObjectUtils - 对象安全操作卫士
  • 包路径org.springframework.util.ObjectUtils
  • 核心功能:对象安全打印、哈希、比较
  • 常用方法
    • nullSafeToString() - 安全转字符串(支持数组)
    • nullSafeHashCode() - 安全获取哈希码
    • nullSafeEquals() - null 安全比较

示例代码:

c 复制代码
// 安全打印对象(避免 NullPointerException)
System.out.println("用户信息: " + ObjectUtils.nullSafeToString(user));

// 数组安全打印
String[] array = {"Java", "Spring", "Boot"};
System.out.println("数组: " + ObjectUtils.nullSafeToString(array)); // [Java, Spring, Boot]

演示类: ObjectUtilsDemo.java


4. Assert - 参数校验断言大师
  • 包路径org.springframework.util.Assert
  • 核心功能:参数校验、前置条件检查
  • 常用方法
    • notNull() - 断言非空
    • hasText() - 断言字符串有内容
    • isTrue() - 断言条件为真

示例代码:

typescript 复制代码
// Service 方法入口校验
public void cancelOrder(Long orderId) {
    Assert.notNull(orderId, "订单ID不能为空");
    Assert.isTrue(orderId > 0, "订单ID必须大于0");
    // 业务逻辑...
}

演示类: AssertDemo.java


【文件和流】

5. FileCopyUtils - 文件拷贝终极方案
  • 包路径org.springframework.util.FileCopyUtils
  • 核心功能:文件、流、字节数组互拷
  • 常用方法
    • copy(InputStream, OutputStream) - 流拷贝
    • copyToByteArray(File) - 文件转字节数组
    • copy(byte[], File) - 字节数组写入文件

演示类: FileCopyUtilsDemo.java


6. StreamUtils - 流操作轻量级专家
  • 包路径org.springframework.util.StreamUtils
  • 核心功能:流转字符串、字节数组
  • 常用方法
    • copyToString(InputStream, Charset) - 流转字符串
    • copyToByteArray(InputStream) - 流转字节数组
    • drain(InputStream) - 排空流

演示类: StreamUtilsDemo.java


7. ResourceUtils - 资源路径解析器
  • 包路径org.springframework.util.ResourceUtils
  • 核心功能:解析 classpath:、file: 等协议
  • ⚠️ 重要提醒 :生产环境推荐使用 ResourceLoader,此工具在 Fat JAR 中可能失效

演示类: ResourceUtilsDemo.java


【反射和 AOP】

8. ReflectionUtils - 反射操作安全网
  • 包路径org.springframework.util.ReflectionUtils
  • 核心功能:反射调用方法、访问字段
  • 常用方法
    • findMethod() - 查找方法
    • invokeMethod() - 调用方法
    • findField() / setField() - 字段操作

⚠️ 提醒:仅推荐在测试中使用,生产代码避免反射

演示类: ReflectionUtilsDemo.java


9. AopProxyUtils - AOP 代理解密器
  • 包路径org.springframework.aop.support.AopProxyUtils
  • 核心功能:获取代理对象的真实类型
  • 使用场景:调试 AOP 代理、日志打印

演示类: AopProxyUtilsDemo.java


【加密和编码】

10. DigestUtils - 加密工具精简版
  • 包路径org.springframework.util.DigestUtils
  • 核心功能:MD5、SHA-256 摘要计算
  • ⚠️ 生产警告 :MD5 已不安全!密码加密必须用 BCryptPasswordEncoder

示例代码:

ini 复制代码
String md5 = DigestUtils.md5DigestAsHex("123456".getBytes()); 
// e10adc3949ba59abbe56e057f20f883e

演示类: DigestUtilsDemo.java


11. Base64Utils - Base64 编解码专家
  • 包路径org.springframework.util.Base64Utils
  • 核心功能:Base64 编解码、URL 安全编码
  • 常用方法
    • encodeToString() - 编码为字符串
    • decodeFromString() - 从字符串解码
    • encodeToUrlSafeString() - URL 安全编码

演示类: Base64UtilsDemo.java


【性能和路径】

12. StopWatch - 代码耗时统计器
  • 包路径org.springframework.util.StopWatch
  • 核心功能:多任务耗时统计、性能分析
  • 使用场景:接口性能监控、方法耗时分析

示例代码:

ini 复制代码
StopWatch watch = new StopWatch("订单服务监控");
watch.start("查询订单");
// 业务逻辑...
watch.stop();
System.out.println(watch.prettyPrint()); // 输出格式化报告

演示类: StopWatchDemo.java


13. AntPathMatcher - 路径匹配引擎
  • 包路径org.springframework.util.AntPathMatcher
  • 核心功能:路径通配符匹配、变量提取
  • 通配符说明
    • ? - 匹配单个字符
    • * - 匹配任意字符(不含 /)
    • ** - 匹配任意层级路径

示例代码:

typescript 复制代码
AntPathMatcher matcher = new AntPathMatcher();
boolean match = matcher.match("/api/user/**", "/api/user/1001/profile"); // true

// 提取路径变量
Map<String, String> vars = matcher.extractUriTemplateVariables(
    "/api/user/{id}", "/api/user/1001");
System.out.println(vars.get("id")); // 1001

演示类: AntPathMatcherDemo.java


【Web 工具】

14. MimeTypeUtils - MIME 类型解析器
  • 包路径org.springframework.util.MimeTypeUtils
  • 核心功能:MIME 类型解析、内容协商
  • 常用常量APPLICATION_JSON, TEXT_HTML, IMAGE_PNG

演示类: MimeTypeUtilsDemo.java


15. UriComponentsBuilder - URL 构建安全专家
  • 包路径org.springframework.web.util.UriComponentsBuilder
  • 核心功能:安全构建 URL、自动编码参数
  • 核心优势:防止 XSS 注入、自动编码特殊字符

示例代码:

arduino 复制代码
String url = UriComponentsBuilder
    .fromHttpUrl("http://api.example.com/search")
    .queryParam("q", "Spring Boot 教程") // 自动编码中文
    .queryParam("id", 1001)
    .toUriString();

演示类: UriComponentsBuilderDemo.java


【其他工具】

16. ClassUtils - 类操作安全助手
  • 包路径org.springframework.util.ClassUtils
  • 核心功能:类存在性检查、类信息获取
  • 使用场景:条件化配置、自动配置

示例代码:

arduino 复制代码
// 检查 Redis 依赖是否存在
boolean available = ClassUtils.isPresent(
    "redis.clients.jedis.Jedis", 
    classLoader);

演示类: ClassUtilsDemo.java


17. SystemPropertyUtils - 系统属性占位符解析器
  • 包路径org.springframework.util.SystemPropertyUtils
  • 核心功能:解析 ${user.home} 等占位符
  • 使用场景:动态生成路径、测试临时目录

示例代码:

ini 复制代码
String path = SystemPropertyUtils.resolvePlaceholders("${user.home}/logs");
// 输出:/Users/yourname/logs

演示类: SystemPropertyUtilsDemo.java


18. NumberUtils - 数字转换安全卫士
  • 包路径org.springframework.util.NumberUtils
  • 核心功能:字符串安全转数字、类型转换
  • 常用方法
    • parseNumber(String, Class) - 解析数字
    • convertNumberToTargetClass() - 数字类型转换

演示类: NumberUtilsDemo.java


19. ConcurrentReferenceHashMap - 并发弱引用 Map
  • 包路径org.springframework.util.ConcurrentReferenceHashMap
  • 核心功能:基于弱/软引用的并发 Map,自动回收
  • 使用场景:轻量级缓存、元数据缓存

⚠️ 提醒:仅用于非关键缓存,生产级缓存用 Caffeine/Redis

演示类: ConcurrentReferenceHashMapDemo.java


20. LinkedMultiValueMap - 多值 Map 实现
  • 包路径org.springframework.util.LinkedMultiValueMap
  • 核心功能:一个 key 对应多个 value,保留插入顺序
  • 使用场景:HTTP 请求参数、表单提交

示例代码:

csharp 复制代码
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.add("hobby", "篮球");
params.add("hobby", "足球");
System.out.println(params.get("hobby")); // [篮球, 足球]

演示类: LinkedMultiValueMapDemo.java


📊 工具类归属包速查表

工具类 所属包 依赖模块
StringUtils org.springframework.util spring-core
CollectionUtils org.springframework.util spring-core
ObjectUtils org.springframework.util spring-core
Assert org.springframework.util spring-core
FileCopyUtils org.springframework.util spring-core
StreamUtils org.springframework.util spring-core
ResourceUtils org.springframework.util spring-core
ReflectionUtils org.springframework.util spring-core
AopProxyUtils org.springframework.aop.support spring-aop
DigestUtils org.springframework.util spring-core
Base64Utils org.springframework.util spring-core
StopWatch org.springframework.util spring-core
AntPathMatcher org.springframework.util spring-core
MimeTypeUtils org.springframework.util spring-core
UriComponentsBuilder org.springframework.web.util spring-web
ClassUtils org.springframework.util spring-core
SystemPropertyUtils org.springframework.util spring-core
NumberUtils org.springframework.util spring-core
ConcurrentReferenceHashMap org.springframework.util spring-core
LinkedMultiValueMap org.springframework.util spring-core

🎓 最佳实践总结

✅ 推荐使用场景

    1. StringUtils:任何字符串判空、处理场景
    1. CollectionUtils:任何集合判空、操作场景
    1. Assert:Service 层方法入口参数校验
    1. StopWatch:性能监控、耗时统计
    1. UriComponentsBuilder:任何需要构建 URL 的场景

⚠️ 使用注意事项

    1. ResourceUtils:勿用于生产环境,Fat JAR 中会失败
    1. DigestUtils:MD5 已不安全,密码加密用 BCrypt
    1. ReflectionUtils:仅限测试使用,生产避免反射
    1. ConcurrentReferenceHashMap:仅用于临时缓存

🚫 避免重复造轮子

不要自己写 使用 Spring 工具
if (str == null str.isEmpty()) StringUtils.hasText(str)
if (list == null list.isEmpty()) CollectionUtils.isEmpty(list)
String.format() 拼接 URL UriComponentsBuilder
手写 MD5 工具类 DigestUtils
手写 Base64 工具类 Base64Utils

🛠 技术栈

  • Spring Boot: 3.2.5
  • Java: 17+
  • Maven: 3.6+

📝 项目结构

bash 复制代码
springuitls/
├── src/main/java/com/artisan/springuitls/
│   ├── SpringuitlsApplication.java          # 主启动类
│   ├── SpringUtilsDemoRunner.java           # 演示运行器
│   └── demos/                                # 演示类包
│       ├── StringUtilsDemo.java
│       ├── CollectionUtilsDemo.java
│       ├── ObjectUtilsDemo.java
│       ├── AssertDemo.java
│       ├── FileCopyUtilsDemo.java
│       ├── StreamUtilsDemo.java
│       ├── ResourceUtilsDemo.java
│       ├── ReflectionUtilsDemo.java
│       ├── AopProxyUtilsDemo.java
│       ├── DigestUtilsDemo.java
│       ├── Base64UtilsDemo.java
│       ├── StopWatchDemo.java
│       ├── AntPathMatcherDemo.java
│       ├── MimeTypeUtilsDemo.java
│       ├── UriComponentsBuilderDemo.java
│       ├── ClassUtilsDemo.java
│       ├── SystemPropertyUtilsDemo.java
│       ├── NumberUtilsDemo.java
│       ├── ConcurrentReferenceHashMapDemo.java
│       └── LinkedMultiValueMapDemo.java
├── pom.xml
└── README.md

📖 学习建议

    1. 按顺序学习:从核心工具开始,逐步深入
    1. 动手实践:运行每个演示,观察输出
    1. 对比学习:理解为什么用 Spring 工具而不是第三方库
    1. 应用到项目:在实际项目中替换现有代码

如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、转发、在看。

关注公众号:woniuxgg,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!

相关推荐
白衣鸽子6 小时前
ListUtils:Java列表操作的瑞士军刀
后端·开源·设计
bcbnb6 小时前
Charles vs Fiddler vs Wireshark,哪款抓包工具最适合开发者?
后端
L.EscaRC6 小时前
【Rust编程】深入解析 Rust gRPC 框架:Tonic
后端·rpc·rust
长存祈月心6 小时前
安装与切换Rust版本
开发语言·后端·rust
流星白龙6 小时前
双端迭代器:从 `next_back()` 到零拷贝“滑动窗口”——Rust DoubleEndedIterator 全景指南
开发语言·后端·rust
JaguarJack7 小时前
PHP 中的命名艺术 实用指南
后端·php
William_cl7 小时前
从 MVC 5 到 Core MVC:ASP.NET MVC 框架的 “进化之路“
后端·asp.net·mvc
低音钢琴7 小时前
【SpringBoot从初学者到专家的成长25】认识SpringBoot中的Spring Expression Language (SpEL)
spring boot·后端·spring·spel
绝无仅有7 小时前
某游戏大厂Java面试深度解析:从多线程到JVM调优(二)
后端·面试·github