李锋镝的博客

  • 首页
  • 时间轴
  • 留言
  • 插件
  • 左邻右舍
  • 关于我
    • 关于我
    • 另一个网站
  • 知识库
  • 赞助
Destiny
自是人生长恨水长东
  1. 首页
  2. 原创
  3. 正文

SpringBoot 中内置的 49 个常用工具类

2025年5月26日 31点热度 0人点赞 0条评论

SpringBoot以其强大的自动配置和丰富的生态系统成为Java开发的首选框架。除了核心功能外,SpringBoot及其依赖的Spring框架还包含大量实用工具类,它们可以显著简化日常开发工作。本文将介绍49个常用工具类,并通过简洁的代码示例展示它们的基本用法。

字符串处理工具类

1. StringUtils

import org.springframework.util.StringUtils;  

// 检查字符串是否为空  
boolean isEmpty = StringUtils.isEmpty(null);  // true  
boolean isEmpty2 = StringUtils.isEmpty("");  // true  

// 检查字符串是否有文本内容  
boolean hasText = StringUtils.hasText("  ");  // false  
boolean hasText2 = StringUtils.hasText("hello");  // true  

// 分割字符串  
String[] parts = StringUtils.tokenizeToStringArray("a,b,c", ",");  

// 清除首尾空白  
String trimmed = StringUtils.trimWhitespace("  hello  ");  // "hello"  

2. AntPathMatcher

import org.springframework.util.AntPathMatcher;  

AntPathMatcher matcher = new AntPathMatcher();  
boolean match1 = matcher.match("/users/*", "/users/123");  // true  
boolean match2 = matcher.match("/users/**", "/users/123/orders");  // true  
boolean match3 = matcher.match("/user?", "/user1");  // true  

// 提取路径变量  
Map<String, String> vars = matcher.extractUriTemplateVariables(  
    "/users/{id}", "/users/42");  // {id=42}  

3. PatternMatchUtils

import org.springframework.util.PatternMatchUtils;  

boolean matches1 = PatternMatchUtils.simpleMatch("user*", "username");  // true  
boolean matches2 = PatternMatchUtils.simpleMatch("user?", "user1");  // true  
boolean matches3 = PatternMatchUtils.simpleMatch(  
    new String[]{"user*", "admin*"}, "username");  // true  

4. PropertyPlaceholderHelper

import org.springframework.util.PropertyPlaceholderHelper;  

PropertyPlaceholderHelper helper = new PropertyPlaceholderHelper("${", "}");  
Properties props = new Properties();  
props.setProperty("name", "World");  
props.setProperty("greeting", "Hello ${name}!");  

String result = helper.replacePlaceholders("${greeting}", props::getProperty);  
// "Hello World!"  

集合和数组工具类

5. CollectionUtils

import org.springframework.util.CollectionUtils;  

// 检查集合是否为空  
boolean isEmpty = CollectionUtils.isEmpty(null);  // true  
boolean isEmpty2 = CollectionUtils.isEmpty(Collections.emptyList());  // true  

// 集合操作  
List<String> list1 = Arrays.asList("a", "b", "c");  
List<String> list2 = Arrays.asList("b", "c", "d");  
Collection<String> intersection = CollectionUtils.intersection(list1, list2);  // [b, c]  

// 合并集合  
List<String> target = new ArrayList<>();  
CollectionUtils.mergeArrayIntoCollection(new String[]{"a", "b"}, target);  

6. MultiValueMap

import org.springframework.util.LinkedMultiValueMap;  
import org.springframework.util.MultiValueMap;  

MultiValueMap<String, String> map = new LinkedMultiValueMap<>();  
map.add("colors", "red");  
map.add("colors", "blue");  
map.add("sizes", "large");  

List<String> colors = map.get("colors");  // [red, blue]  

7. ConcurrentReferenceHashMap

import org.springframework.util.ConcurrentReferenceHashMap;  

// 创建高并发场景下的引用Map (类似WeakHashMap但线程安全)  
Map<String, Object> cache = new ConcurrentReferenceHashMap<>();  
cache.put("key1", new LargeObject());  

8. SystemPropertyUtils

import org.springframework.util.SystemPropertyUtils;  

// 解析含系统属性的字符串  
String javaHome = SystemPropertyUtils.resolvePlaceholders("${java.home}");  
String pathWithDefault = SystemPropertyUtils.resolvePlaceholders(  
    "${unknown.property:default}");  // "default"  

反射和类处理工具类

9. ReflectionUtils

import org.springframework.util.ReflectionUtils;  

// 获取类的字段  
Field field = ReflectionUtils.findField(Person.class, "name");  
ReflectionUtils.makeAccessible(field);  
ReflectionUtils.setField(field, person, "John");  

// 调用方法  
Method method = ReflectionUtils.findMethod(Person.class, "setAge", int.class);  
ReflectionUtils.makeAccessible(method);  
ReflectionUtils.invokeMethod(method, person, 30);  

// 字段回调  
ReflectionUtils.doWithFields(Person.class, field -> {  
    System.out.println(field.getName());  
});  

10. ClassUtils

import org.springframework.util.ClassUtils;  

// 获取类名  
String shortName = ClassUtils.getShortName("org.example.MyClass");  // "MyClass"  

// 检查类是否存在  
boolean exists = ClassUtils.isPresent("java.util.List", null);  // true  

// 获取所有接口  
Class<?>[] interfaces = ClassUtils.getAllInterfaces(ArrayList.class);  

// 获取用户定义的类加载器  
ClassLoader classLoader = ClassUtils.getDefaultClassLoader();  

11. MethodInvoker

import org.springframework.util.MethodInvoker;  

MethodInvoker invoker = new MethodInvoker();  
invoker.setTargetObject(new MyService());  
invoker.setTargetMethod("calculateTotal");  
invoker.setArguments(new Object[]{100, 0.2});  
invoker.prepare();  
Object result = invoker.invoke();  

12. BeanUtils

import org.springframework.beans.BeanUtils;  

// 复制属性  
Person source = new Person("John", 30);  
Person target = new Person();  
BeanUtils.copyProperties(source, target);  

// 实例化类  
Person newPerson = BeanUtils.instantiateClass(Person.class);  

// 查找方法  
Method method = BeanUtils.findMethod(Person.class, "setName", String.class);  

I/O和资源工具类

13. FileCopyUtils

import org.springframework.util.FileCopyUtils;  

// 复制文件内容  
byte[] bytes = FileCopyUtils.copyToByteArray(new File("input.txt"));  
FileCopyUtils.copy(bytes, new File("output.txt"));  

// 读取文本  
String content = FileCopyUtils.copyToString(  
    new InputStreamReader(new FileInputStream("input.txt"), "UTF-8"));  

// 流复制  
FileCopyUtils.copy(inputStream, outputStream);  

14. ResourceUtils

import org.springframework.util.ResourceUtils;  

// 获取文件  
File file = ResourceUtils.getFile("classpath:config.properties");  

// 检查是否是URL  
boolean isUrl = ResourceUtils.isUrl("http://example.com");  

// 获取URL  
URL url = ResourceUtils.getURL("classpath:data.json");  

15. StreamUtils

import org.springframework.util.StreamUtils;  

// 流操作  
byte[] data = StreamUtils.copyToByteArray(inputStream);  
String text = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);  
StreamUtils.copy(inputStream, outputStream);  
StreamUtils.copy("Hello", StandardCharsets.UTF_8, outputStream);  

16. FileSystemUtils

import org.springframework.util.FileSystemUtils;  

// 删除目录  
boolean deleted = FileSystemUtils.deleteRecursively(new File("/tmp/test"));  

// 复制目录  
FileSystemUtils.copyRecursively(new File("source"), new File("target"));  

17. ResourcePatternUtils

import org.springframework.core.io.Resource;  
import org.springframework.core.io.support.ResourcePatternUtils;  
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;  

// 获取匹配资源  
Resource[] resources = ResourcePatternUtils.getResourcePatternResolver(  
    new PathMatchingResourcePatternResolver())  
    .getResources("classpath*:META-INF/*.xml");  

Web相关工具类

18. WebUtils

import org.springframework.web.util.WebUtils;  
import javax.servlet.http.HttpServletRequest;  

// 获取Cookie  
Cookie cookie = WebUtils.getCookie(request, "sessionId");  

// 获取请求路径  
String path = WebUtils.getLookupPathForRequest(request);  

// 从请求中获取参数  
int pageSize = WebUtils.getIntParameter(request, "pageSize", 10);  

19. UriUtils

import org.springframework.web.util.UriUtils;  

// 编解码URI组件  
String encoded = UriUtils.encodePathSegment("path with spaces", "UTF-8");  
String decoded = UriUtils.decode(encoded, "UTF-8");  

20. UriComponentsBuilder

import org.springframework.web.util.UriComponentsBuilder;  

// 构建URI  
URI uri = UriComponentsBuilder.fromHttpUrl("http://example.com")  
    .path("/products")  
    .queryParam("category", "books")  
    .queryParam("sort", "price")  
    .build()  
    .toUri();  

21. ContentCachingRequestWrapper

import org.springframework.web.util.ContentCachingRequestWrapper;  
import javax.servlet.http.HttpServletRequest;  

ContentCachingRequestWrapper wrapper = new ContentCachingRequestWrapper(request);  
// 请求处理后  
byte[] body = wrapper.getContentAsByteArray();  

22. HtmlUtils

import org.springframework.web.util.HtmlUtils;  

// HTML转义  
String escaped = HtmlUtils.htmlEscape("<script>alert('XSS')</script>");  
// <script>alert('XSS')</script>  

// HTML反转义  
String unescaped = HtmlUtils.htmlUnescape("<b>Bold</b>");  
// <b>Bold</b>  

验证和断言工具类

23. Assert

import org.springframework.util.Assert;  

// 常用断言  
Assert.notNull(object, "Object must not be null");  
Assert.hasText(name, "Name must not be empty");  
Assert.isTrue(amount > 0, "Amount must be positive");  
Assert.notEmpty(items, "Items must not be empty");  
Assert.state(isInitialized, "Service is not initialized");  

24. ObjectUtils

import org.springframework.util.ObjectUtils;  

// 对象工具  
boolean isEmpty = ObjectUtils.isEmpty(null);  // true  
boolean isEmpty2 = ObjectUtils.isEmpty(new String[0]);  // true  

String nullSafe = ObjectUtils.nullSafeToString(null);  // "null"  
boolean equals = ObjectUtils.nullSafeEquals(obj1, obj2);  

// 默认值  
String value = ObjectUtils.getOrDefault(null, "default");  

25. NumberUtils

import org.springframework.util.NumberUtils;  

// 数字转换  
Integer parsed = NumberUtils.parseNumber("42", Integer.class);  
Double converted = NumberUtils.convertNumberToTargetClass(42, Double.class);  

日期和时间工具类

26. DateTimeUtils

import org.springframework.format.datetime.DateTimeFormatUtils;  
import java.util.Date;  

// 格式化日期  
String formatted = DateTimeFormatUtils.getDateTimeInstance().format(new Date());  

27. StopWatch

import org.springframework.util.StopWatch;  

// 计时工具  
StopWatch watch = new StopWatch("TaskName");  
watch.start("phase1");  
// 执行任务1  
Thread.sleep(100);  
watch.stop();  

watch.start("phase2");  
// 执行任务2  
Thread.sleep(200);  
watch.stop();  

// 输出报告  
System.out.println(watch.prettyPrint());  
System.out.println("Total time: " + watch.getTotalTimeMillis() + "ms");  

安全相关工具类

28. DigestUtils

import org.springframework.util.DigestUtils;  

// MD5哈希  
String md5 = DigestUtils.md5DigestAsHex("password".getBytes());  

// 文件MD5  
String fileMd5;  
try (InputStream is = new FileInputStream("file.txt")) {  
    fileMd5 = DigestUtils.md5DigestAsHex(is);  
}  

29. Base64Utils

import org.springframework.util.Base64Utils;  

// Base64编解码  
byte[] data = "Hello World".getBytes();  
String encoded = Base64Utils.encodeToString(data);  
byte[] decoded = Base64Utils.decodeFromString(encoded);  

30. CryptoUtils

import org.springframework.security.crypto.encrypt.Encryptors;  
import org.springframework.security.crypto.encrypt.TextEncryptor;  

// 文本加密  
String password = "secret";  
String salt = "deadbeef";  
TextEncryptor encryptor = Encryptors.text(password, salt);  
String encrypted = encryptor.encrypt("Message");  
String decrypted = encryptor.decrypt(encrypted);  

JSON和数据转换工具类

31. JsonUtils

import org.springframework.boot.json.JsonParser;  
import org.springframework.boot.json.JsonParserFactory;  

// JSON解析  
JsonParser parser = JsonParserFactory.getJsonParser();  
Map<String, Object> parsed = parser.parseMap("{\"name\":\"John\", \"age\":30}");  
List<Object> parsedList = parser.parseList("[1, 2, 3]");  

32. TypeUtils

import org.springframework.core.ResolvableType;  

// 类型解析  
ResolvableType type = ResolvableType.forClass(List.class);  
ResolvableType elementType = type.getGeneric(0);  

// 泛型类型处理  
ResolvableType mapType = ResolvableType.forClassWithGenerics(  
    Map.class, String.class, Integer.class);  

33. MappingJackson2HttpMessageConverter

import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;  
import com.fasterxml.jackson.databind.ObjectMapper;  

// 自定义JSON转换器  
ObjectMapper mapper = new ObjectMapper();  
// 配置mapper  
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(mapper);  

其他实用工具类

34. RandomStringUtils

import org.apache.commons.lang3.RandomStringUtils;  

// 随机字符串生成  
String random = RandomStringUtils.randomAlphanumeric(10);  
String randomLetters = RandomStringUtils.randomAlphabetic(8);  
String randomNumeric = RandomStringUtils.randomNumeric(6);  

35. CompletableFutureUtils

import java.util.concurrent.CompletableFuture;  
import java.util.List;  
import java.util.stream.Collectors;  

// 合并多个CompletableFuture结果  
List<CompletableFuture<String>> futures = /* 多个异步操作 */;  
CompletableFuture<List<String>> allResults = CompletableFuture.allOf(  
    futures.toArray(new CompletableFuture[0]))  
    .thenApply(v -> futures.stream()  
        .map(CompletableFuture::join)  
        .collect(Collectors.toList()));  

36. CacheControl

import org.springframework.http.CacheControl;  
import java.util.concurrent.TimeUnit;  

// 缓存控制  
CacheControl cacheControl = CacheControl.maxAge(1, TimeUnit.HOURS)  
    .noTransform()  
    .mustRevalidate();  

String headerValue = cacheControl.getHeaderValue();  

37. AnnotationUtils

import org.springframework.core.annotation.AnnotationUtils;  

// 查找注解  
Component annotation = AnnotationUtils.findAnnotation(MyClass.class, Component.class);  

// 获取注解属性  
String value = AnnotationUtils.getValue(annotation, "value").toString();  

// 合并注解  
Component mergedAnnotation = AnnotationUtils.synthesizeAnnotation(  
    annotation, MyClass.class);  

38. DefaultConversionService

import org.springframework.core.convert.support.DefaultConversionService;  

// 类型转换  
DefaultConversionService conversionService = new DefaultConversionService();  
String strValue = "42";  
Integer intValue = conversionService.convert(strValue, Integer.class);  

39. HeaderUtils

import org.springframework.http.HttpHeaders;  

// HTTP头处理  
HttpHeaders headers = new HttpHeaders();  
headers.add("Content-Type", "application/json");  
headers.setContentLength(1024);  
headers.setCacheControl("max-age=3600");  

40. MediaTypeFactory

import org.springframework.http.MediaType;  
import org.springframework.http.MediaTypeFactory;  
import java.util.Optional;  

// 根据文件名推断媒体类型  
Optional<MediaType> mediaType = MediaTypeFactory.getMediaType("document.pdf");  
// application/pdf  

41. MimeTypeUtils

import org.springframework.util.MimeTypeUtils;  

// MIME类型常量和解析  
boolean isCompatible = MimeTypeUtils.APPLICATION_JSON.isCompatibleWith(  
    MimeTypeUtils.APPLICATION_JSON_UTF8);  

42. WebClient

import org.springframework.web.reactive.function.client.WebClient;  
import org.springframework.web.reactive.function.client.ExchangeFilterFunction;  

// 创建WebClient  
WebClient webClient = WebClient.builder()  
    .baseUrl("https://api.example.com")  
    .defaultHeader("Authorization", "Bearer token")  
    .filter(ExchangeFilterFunction.ofRequestProcessor(  
        clientRequest -> {  
            // 请求处理  
            return Mono.just(clientRequest);  
        }))  
    .build();  

43. PropertySource

import org.springframework.core.env.PropertySource;  
import org.springframework.core.env.StandardEnvironment;  

// 添加属性源  
StandardEnvironment env = new StandardEnvironment();  
Map<String, Object> map = new HashMap<>();  
map.put("app.name", "MyApp");  
env.getPropertySources().addFirst(new MapPropertySource("my-properties", map));  

44. ApplicationEventPublisher

import org.springframework.context.ApplicationEventPublisher;  

// 发布事件  
ApplicationEventPublisher publisher = /* 获取发布器 */;  
publisher.publishEvent(new CustomEvent("Something happened"));  

45. LocaleContextHolder

import org.springframework.context.i18n.LocaleContextHolder;  
import java.util.Locale;  

// 获取/设置当前语言环境  
Locale currentLocale = LocaleContextHolder.getLocale();  
LocaleContextHolder.setLocale(Locale.FRENCH);  

46. AopUtils

import org.springframework.aop.support.AopUtils;  

// AOP工具方法  
boolean isAopProxy = AopUtils.isAopProxy(bean);  
boolean isCglibProxy = AopUtils.isCglibProxy(bean);  
Class<?> targetClass = AopUtils.getTargetClass(bean);  

47. ProxyFactory

import org.springframework.aop.framework.ProxyFactory;  

// 创建代理  
ProxyFactory factory = new ProxyFactory(targetObject);  
factory.addInterface(MyInterface.class);  
factory.addAdvice(new MyMethodInterceptor());  
MyInterface proxy = (MyInterface) factory.getProxy();  

48. ClassPathScanningCandidateComponentProvider

import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;  

// 扫描类路径  
ClassPathScanningCandidateComponentProvider scanner =  
    new ClassPathScanningCandidateComponentProvider(true);  
scanner.addIncludeFilter(new AnnotationTypeFilter(Component.class));  
Set<BeanDefinition> beans = scanner.findCandidateComponents("org.example");  

49. YamlPropertiesFactoryBean

import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;  
import org.springframework.core.io.ClassPathResource;  

// 解析YAML文件  
YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();  
yaml.setResources(new ClassPathResource("application.yml"));  
Properties properties = yaml.getObject();  
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/archives/article/4430

相关文章

  • SpringBoot常用注解
  • SpringBoot启动概述(SpringBoot2.1.7)
  • SpringBoot基于redis的分布式锁的实现(源码)
  • 分布式服务生成唯一不重复ID(24位字符串)
  • Spring中@NotNull、@NotBlank、@NotEmpty的区别
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: JAVA Spring SpringBoot 工具类
最后更新:2025年5月26日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >

文章评论

1 2 3 4 5 6 7 8 9 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 46 47 48 49 50 51 52 53 54 55 57 58 60 61 62 63 64 65 66 67 69 72 74 76 77 78 79 80 81 82 85 86 87 90 92 93 94 95 96 97 98 99
取消回复

天长地久有时尽,此恨绵绵无绝期。

最新 热点 随机
最新 热点 随机
ReentrantLock深度解析 RedisTemplate和Redisson的区别 SpringBoot常用注解 CompletableFuture使用详解 金融级JVM深度调优实战的经验和技巧 SpringBoot 实现接口防刷的 5 种实现方案
玩博客的人是不是越来越少了?2024年11月1号 农历十月初一准备入手个亚太的ECS,友友们有什么建议吗?别再背线程池的七大参数了,现在面试官都这么问@Valid 和 @Validated 的区别SpringBoot 实现接口防刷的 5 种实现方案
从零搭建Spring Cloud Gateway网关(二)—— 打印请求响应日志 C# 11 的这个新特性,我愿称之最强! 网站升级到http/2 ReentrantLock深度解析 MySQL 的自增 ID 用完了,怎么办? RedisTemplate和Redisson的区别
标签聚合
K8s 日常 文学 SQL 架构 JVM 设计模式 面试 教程 JAVA MySQL 多线程 docker Redis ElasticSearch IDEA 分布式 SpringBoot Spring 数据库
友情链接
  • i架构
  • LyShark - 孤风洗剑
  • 临窗旋墨
  • 博友圈
  • 博客录
  • 博客星球
  • 哥斯拉
  • 志文工作室
  • 搬砖日记
  • 旋律的博客
  • 旧时繁华
  • 林羽凡
  • 知向前端
  • 集博栈
  • 韩小韩博客

COPYRIGHT © 2025 lifengdi.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Dylan

津ICP备2024022503号-3