官方親授!Spring Boot 內(nèi)置20個(gè)超強(qiáng)工具類,讓你的項(xiàng)目開發(fā)快人一步!
在多數(shù)項(xiàng)目中,開發(fā)者為了方便常常引入各種工具包,比如 Apache Commons、Guava、Hutool…… 但其實(shí),Spring 框架自身早已內(nèi)置了大量經(jīng)過高強(qiáng)度生產(chǎn)驗(yàn)證的核心工具類。這些類不僅功能完備,還能完美融入 Spring Boot 的上下文體系,幫助你寫出更優(yōu)雅、更健壯、更高性能的代碼。
本文將帶你一次性掌握 Spring 官方精選的 20 大工具類, 每個(gè)工具類都配有:
- 演示類路徑
- 核心功能點(diǎn)與適用場(chǎng)景
- 完整可運(yùn)行示例代碼
- 最佳實(shí)踐與常見陷阱提示
一鍵啟動(dòng)示例項(xiàng)目
# 克隆項(xiàng)目
git clone <repository-url>
cd spring-utils
# 啟動(dòng)交互式菜單模式(推薦)
mvn spring-boot:run
# 或直接運(yùn)行全部示例
mvn spring-boot:run -Dspring-boot.run.arguments="all"核心工具類
1.StringUtils — 字符串處理終結(jié)者
包路徑:org.springframework.util.StringUtils演示類:/src/main/java/com/icoderoad/utils/StringUtilsDemo.java
功能亮點(diǎn): 字符串判空、去空格、文件路徑處理、字符串拼接。
package com.icoderoad.utils;
import org.springframework.util.StringUtils;
public class StringUtilsDemo {
public static void main(String[] args) {
String nickname = " ICodeRoad ";
// 判斷是否有內(nèi)容(自動(dòng) trim)
if (StringUtils.hasText(nickname)) {
System.out.println("昵稱有效:" + nickname.trim());
}
// 提取文件名
String filename = StringUtils.getFilename("/home/user/docs/readme.txt");
System.out.println("文件名:" + filename);
// 將數(shù)組轉(zhuǎn)為逗號(hào)分隔字符串
String[] arr = {"Java", "Spring", "Boot"};
String joined = StringUtils.arrayToCommaDelimitedString(arr);
System.out.println("拼接結(jié)果:" + 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("無標(biāo)簽,跳過處理");
return;
}
tags.forEach(tag -> System.out.println("處理標(biāo)簽:" + 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 — 對(duì)象安全守護(hù)者
包路徑: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("數(shù)組打?。? + ObjectUtils.nullSafeToString(arr));
System.out.println("安全比較:" + ObjectUtils.nullSafeEquals("abc", "abc"));
}
}4.Assert — 參數(shù)驗(yàn)證大師
包路徑: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("讀取內(nèi)容:" + 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());
}
}提示:生產(chǎn)環(huán)境推薦
ResourceLoader,因 Fat JAR 結(jié)構(gòu)下ResourceUtils可能失效。
反射與 AOP
8.ReflectionUtils — 反射操作安全網(wǎng)
包路徑: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("結(jié)果:" + 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("真實(shí)類型:" + 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 存儲(chǔ)密碼,使用
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 — 性能計(jì)時(shí)器
包路徑: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("任務(wù)監(jiān)控");
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("匹配結(jié)果:" + match);
Map<String, String> vars = matcher.extractUriTemplateVariables("/api/user/{id}", "/api/user/1001");
System.out.println("提取參數(shù):" + 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 構(gòu)建專家
包路徑: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("構(gòu)建URL:" + url);
}
}其他實(shí)用工具
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 — 系統(tǒng)屬性解析器
演示類:/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 — 數(shù)字轉(zhuǎn)換安全衛(wèi)士
演示類:/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("轉(zhuǎn)換結(jié)果:" + num);
}
}19.ConcurrentReferenceHashMap — 并發(fā)弱引用 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("緩存內(nèi)容:" + cache.get("key1"));
}
}20.LinkedMultiValueMap — 多值 Map 實(shí)現(xiàn)
演示類:/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"));
}
}最佳實(shí)踐與避坑總結(jié)
推薦使用工具類 | 場(chǎng)景 |
| 字符串判空與處理 |
| 集合判空與合并 |
| 參數(shù)前置校驗(yàn) |
| 性能分析 |
| URL 構(gòu)建 |
慎用工具類 | 原因 |
| Fat JAR 不兼容 |
| MD5 不安全 |
| 性能開銷大 |
| 僅適合輕量緩存 |
結(jié)語:懂工具者,事半功倍
Spring Boot 不只是框架,更是一套完整的開發(fā)體系。 這些工具類的存在,正是為了讓你寫更少的代碼,犯更少的錯(cuò),交付更快的產(chǎn)品。
當(dāng)你熟練掌握這些官方工具,就能在任何項(xiàng)目中游刃有余,不再依賴外部庫,也不再重復(fù)造輪子。
Spring 工具類,是每個(gè)高效 Java 開發(fā)者的秘密武器。
























