点击上方"程序员蜗牛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 |
🎓 最佳实践总结
✅ 推荐使用场景
-
- StringUtils:任何字符串判空、处理场景
-
- CollectionUtils:任何集合判空、操作场景
-
- Assert:Service 层方法入口参数校验
-
- StopWatch:性能监控、耗时统计
-
- UriComponentsBuilder:任何需要构建 URL 的场景
⚠️ 使用注意事项
-
- ResourceUtils:勿用于生产环境,Fat JAR 中会失败
-
- DigestUtils:MD5 已不安全,密码加密用 BCrypt
-
- ReflectionUtils:仅限测试使用,生产避免反射
-
- 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
📖 学习建议
-
- 按顺序学习:从核心工具开始,逐步深入
-
- 动手实践:运行每个演示,观察输出
-
- 对比学习:理解为什么用 Spring 工具而不是第三方库
-
- 应用到项目:在实际项目中替换现有代码
如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、转发、在看。
关注公众号:woniuxgg,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!