官方親授!Spring Boot 內置20個超強工具類,讓你的項目開發快人一步!
在多數項目中,開發者為了方便常常引入各種工具包,比如 Apache Commons、Guava、Hutool…… 但其實,Spring 框架自身早已內置了大量經過高強度生產驗證的核心工具類。這些類不僅功能完備,還能完美融入 Spring Boot 的上下文體系,幫助你寫出更優雅、更健壯、更高性能的代碼。
本文將帶你一次性掌握 Spring 官方精選的 20 大工具類, 每個工具類都配有:
- 演示類路徑
- 核心功能點與適用場景
- 完整可運行示例代碼
- 最佳實踐與常見陷阱提示
一鍵啟動示例項目
# 克隆項目
git clone <repository-url>
cd spring-utils
# 啟動交互式菜單模式(推薦)
mvn spring-boot:run
# 或直接運行全部示例
mvn spring-boot:run -Dspring-boot.run.arguments="all"核心工具類
1.StringUtils — 字符串處理終結者
包路徑:org.springframework.util.StringUtils演示類:/src/main/java/com/icoderoad/utils/StringUtilsDemo.java
功能亮點: 字符串判空、去空格、文件路徑處理、字符串拼接。
package com.icoderoad.utils;
import org.springframework.util.StringUtils;
public class StringUtilsDemo {
public static void main(String[] args) {
String nickname = " ICodeRoad ";
// 判斷是否有內容(自動 trim)
if (StringUtils.hasText(nickname)) {
System.out.println("昵稱有效:" + nickname.trim());
}
// 提取文件名
String filename = StringUtils.getFilename("/home/user/docs/readme.txt");
System.out.println("文件名:" + filename);
// 將數組轉為逗號分隔字符串
String[] arr = {"Java", "Spring", "Boot"};
String joined = StringUtils.arrayToCommaDelimitedString(arr);
System.out.println("拼接結果:" + joined);
}
}2.CollectionUtils — 集合防坑神器
包路徑:org.springframework.util.CollectionUtils演示類:/src/main/java/com/icoderoad/utils/CollectionUtilsDemo.java
package com.icoderoad.utils;
import org.springframework.util.CollectionUtils;
import java.util.*;
public class CollectionUtilsDemo {
public static void main(String[] args) {
List<String> tags = Arrays.asList("Java", "Spring", "AOP");
if (CollectionUtils.isEmpty(tags)) {
System.out.println("無標簽,跳過處理");
return;
}
tags.forEach(tag -> System.out.println("處理標簽:" + tag));
List<String> list1 = Arrays.asList("A", "B", "C");
List<String> list2 = Arrays.asList("B", "C", "D");
System.out.println("交集:" + CollectionUtils.intersection(list1, list2));
}
}3.ObjectUtils — 對象安全守護者
包路徑:org.springframework.util.ObjectUtils演示類:/src/main/java/com/icoderoad/utils/ObjectUtilsDemo.java
package com.icoderoad.utils;
import org.springframework.util.ObjectUtils;
public class ObjectUtilsDemo {
public static void main(String[] args) {
Object user = null;
System.out.println("安全打印:" + ObjectUtils.nullSafeToString(user));
String[] arr = {"Java", "Spring", "Boot"};
System.out.println("數組打印:" + ObjectUtils.nullSafeToString(arr));
System.out.println("安全比較:" + ObjectUtils.nullSafeEquals("abc", "abc"));
}
}4.Assert — 參數驗證大師
包路徑:org.springframework.util.Assert演示類:/src/main/java/com/icoderoad/utils/AssertDemo.java
package com.icoderoad.utils;
import org.springframework.util.Assert;
public class AssertDemo {
public static void cancelOrder(Long orderId) {
Assert.notNull(orderId, "訂單ID不能為空");
Assert.isTrue(orderId > 0, "訂單ID必須大于0");
System.out.println("取消訂單成功:" + orderId);
}
public static void main(String[] args) {
cancelOrder(1001L);
}
}文件與流工具類
5.FileCopyUtils — 文件拷貝終極方案
包路徑:org.springframework.util.FileCopyUtils演示類:/src/main/java/com/icoderoad/utils/FileCopyUtilsDemo.java
package com.icoderoad.utils;
import org.springframework.util.FileCopyUtils;
import java.io.*;
public class FileCopyUtilsDemo {
public static void main(String[] args) throws Exception {
File source = new File("source.txt");
File target = new File("target.txt");
FileCopyUtils.copy(new FileInputStream(source), new FileOutputStream(target));
System.out.println("文件拷貝完成!");
}
}6.StreamUtils — 流操作輕量專家
包路徑:org.springframework.util.StreamUtils演示類:/src/main/java/com/icoderoad/utils/StreamUtilsDemo.java
package com.icoderoad.utils;
import org.springframework.util.StreamUtils;
import java.io.*;
import java.nio.charset.StandardCharsets;
public class StreamUtilsDemo {
public static void main(String[] args) throws Exception {
InputStream is = new ByteArrayInputStream("Spring Utils".getBytes());
String text = StreamUtils.copyToString(is, StandardCharsets.UTF_8);
System.out.println("讀取內容:" + text);
}
}7.ResourceUtils — 資源路徑解析器
包路徑:org.springframework.util.ResourceUtils演示類:/src/main/java/com/icoderoad/utils/ResourceUtilsDemo.java
package com.icoderoad.utils;
import org.springframework.util.ResourceUtils;
import java.io.File;
public class ResourceUtilsDemo {
public static void main(String[] args) throws Exception {
File file = ResourceUtils.getFile("classpath:application.yml");
System.out.println("文件路徑:" + file.getAbsolutePath());
}
}提示:生產環境推薦
ResourceLoader,因 Fat JAR 結構下ResourceUtils可能失效。
反射與 AOP
8.ReflectionUtils — 反射操作安全網
包路徑:org.springframework.util.ReflectionUtils演示類:/src/main/java/com/icoderoad/utils/ReflectionUtilsDemo.java
package com.icoderoad.utils;
import org.springframework.util.ReflectionUtils;
import java.lang.reflect.Method;
public class ReflectionUtilsDemo {
public static void main(String[] args) throws Exception {
Method method = ReflectionUtils.findMethod(String.class, "toUpperCase");
Object result = ReflectionUtils.invokeMethod(method, "spring");
System.out.println("結果:" + result);
}
}9.AopProxyUtils — AOP 代理解密器
包路徑:org.springframework.aop.support.AopProxyUtils演示類:/src/main/java/com/icoderoad/utils/AopProxyUtilsDemo.java
package com.icoderoad.utils;
import org.springframework.aop.support.AopProxyUtils;
import org.springframework.stereotype.Service;
@Service
public class AopProxyUtilsDemo {
public static void main(String[] args) {
AopProxyUtilsDemo proxy = new AopProxyUtilsDemo();
System.out.println("真實類型:" + AopProxyUtils.ultimateTargetClass(proxy));
}
}加密與編碼
10.DigestUtils — 摘要算法助手
包路徑:org.springframework.util.DigestUtils演示類:/src/main/java/com/icoderoad/utils/DigestUtilsDemo.java
package com.icoderoad.utils;
import org.springframework.util.DigestUtils;
public class DigestUtilsDemo {
public static void main(String[] args) {
String md5 = DigestUtils.md5DigestAsHex("123456".getBytes());
System.out.println("MD5 摘要:" + md5);
}
}提示:不要用 MD5 存儲密碼,使用
BCryptPasswordEncoder才安全。
11.Base64Utils — 編解碼專家
包路徑:org.springframework.util.Base64Utils演示類:/src/main/java/com/icoderoad/utils/Base64UtilsDemo.java
package com.icoderoad.utils;
import org.springframework.util.Base64Utils;
public class Base64UtilsDemo {
public static void main(String[] args) {
String encoded = Base64Utils.encodeToString("Spring Boot".getBytes());
System.out.println("編碼:" + encoded);
String decoded = new String(Base64Utils.decodeFromString(encoded));
System.out.println("解碼:" + decoded);
}
}性能與路徑
12.StopWatch — 性能計時器
包路徑:org.springframework.util.StopWatch演示類:/src/main/java/com/icoderoad/utils/StopWatchDemo.java
package com.icoderoad.utils;
import org.springframework.util.StopWatch;
public class StopWatchDemo {
public static void main(String[] args) {
StopWatch watch = new StopWatch("任務監控");
watch.start("初始化");
try { Thread.sleep(200); } catch (InterruptedException ignored) {}
watch.stop();
watch.start("加載配置");
try { Thread.sleep(150); } catch (InterruptedException ignored) {}
watch.stop();
System.out.println(watch.prettyPrint());
}
}13.AntPathMatcher — 路徑匹配引擎
包路徑:org.springframework.util.AntPathMatcher演示類:/src/main/java/com/icoderoad/utils/AntPathMatcherDemo.java
package com.icoderoad.utils;
import org.springframework.util.AntPathMatcher;
import java.util.Map;
public class AntPathMatcherDemo {
public static void main(String[] args) {
AntPathMatcher matcher = new AntPathMatcher();
boolean match = matcher.match("/api/user/**", "/api/user/1001/profile");
System.out.println("匹配結果:" + match);
Map<String, String> vars = matcher.extractUriTemplateVariables("/api/user/{id}", "/api/user/1001");
System.out.println("提取參數:" + vars.get("id"));
}
}Web 工具
14.MimeTypeUtils — MIME 類型解析器
包路徑:org.springframework.util.MimeTypeUtils演示類:/src/main/java/com/icoderoad/utils/MimeTypeUtilsDemo.java
package com.icoderoad.utils;
import org.springframework.util.MimeTypeUtils;
public class MimeTypeUtilsDemo {
public static void main(String[] args) {
System.out.println("JSON類型:" + MimeTypeUtils.APPLICATION_JSON_VALUE);
System.out.println("HTML類型:" + MimeTypeUtils.TEXT_HTML_VALUE);
}
}15.UriComponentsBuilder — URL 構建專家
包路徑:org.springframework.web.util.UriComponentsBuilder演示類:/src/main/java/com/icoderoad/utils/UriComponentsBuilderDemo.java
package com.icoderoad.utils;
import org.springframework.web.util.UriComponentsBuilder;
public class UriComponentsBuilderDemo {
public static void main(String[] args) {
String url = UriComponentsBuilder
.fromHttpUrl("http://api.example.com/search")
.queryParam("q", "Spring Boot 教程")
.queryParam("page", 2)
.toUriString();
System.out.println("構建URL:" + url);
}
}其他實用工具
16.ClassUtils — 類信息工具
演示類:/src/main/java/com/icoderoad/utils/ClassUtilsDemo.java
package com.icoderoad.utils;
import org.springframework.util.ClassUtils;
public class ClassUtilsDemo {
public static void main(String[] args) {
boolean redisExists = ClassUtils.isPresent("redis.clients.jedis.Jedis", ClassLoader.getSystemClassLoader());
System.out.println("Redis依賴是否存在:" + redisExists);
}
}17.SystemPropertyUtils — 系統屬性解析器
演示類:/src/main/java/com/icoderoad/utils/SystemPropertyUtilsDemo.java
package com.icoderoad.utils;
import org.springframework.util.SystemPropertyUtils;
public class SystemPropertyUtilsDemo {
public static void main(String[] args) {
String path = SystemPropertyUtils.resolvePlaceholders("${user.home}/logs");
System.out.println("日志目錄:" + path);
}
}18.NumberUtils — 數字轉換安全衛士
演示類:/src/main/java/com/icoderoad/utils/NumberUtilsDemo.java
package com.icoderoad.utils;
import org.springframework.util.NumberUtils;
public class NumberUtilsDemo {
public static void main(String[] args) {
Integer num = NumberUtils.parseNumber("123", Integer.class);
System.out.println("轉換結果:" + num);
}
}19.ConcurrentReferenceHashMap — 并發弱引用 Map
演示類:/src/main/java/com/icoderoad/utils/ConcurrentReferenceHashMapDemo.java
package com.icoderoad.utils;
import org.springframework.util.ConcurrentReferenceHashMap;
public class ConcurrentReferenceHashMapDemo {
public static void main(String[] args) {
ConcurrentReferenceHashMap<String, String> cache = new ConcurrentReferenceHashMap<>();
cache.put("key1", "value1");
System.out.println("緩存內容:" + cache.get("key1"));
}
}20.LinkedMultiValueMap — 多值 Map 實現
演示類:/src/main/java/com/icoderoad/utils/LinkedMultiValueMapDemo.java
package com.icoderoad.utils;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
public class LinkedMultiValueMapDemo {
public static void main(String[] args) {
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.add("hobby", "籃球");
params.add("hobby", "足球");
System.out.println("愛好:" + params.get("hobby"));
}
}最佳實踐與避坑總結
推薦使用工具類 | 場景 |
| 字符串判空與處理 |
| 集合判空與合并 |
| 參數前置校驗 |
| 性能分析 |
| URL 構建 |
慎用工具類 | 原因 |
| Fat JAR 不兼容 |
| MD5 不安全 |
| 性能開銷大 |
| 僅適合輕量緩存 |
結語:懂工具者,事半功倍
Spring Boot 不只是框架,更是一套完整的開發體系。 這些工具類的存在,正是為了讓你寫更少的代碼,犯更少的錯,交付更快的產品。
當你熟練掌握這些官方工具,就能在任何項目中游刃有余,不再依賴外部庫,也不再重復造輪子。
Spring 工具類,是每個高效 Java 開發者的秘密武器。
























