Spring Boot 内置的常用工具类整理
Spring Boot 在核心库中提供了一系列常用的工具类,涵盖了断言、对象处理、集合操作、文件与资源处理、IO 流、反射和 AOP。这些工具类帮助开发者提高代码的简洁性和可维护性。本文将对这些工具类进行详细介绍,结合官方文档进行说明。
断言工具类(Assert
)
断言用于在代码执行时验证参数的有效性,防止不合理的数据进入系统。Spring 提供的 Assert
工具类相比于 JDK 的断言功能更加灵活,它通常用于检查参数的合法性。
常用方法
notNull(Object object, String message)
:确保对象不为null
,否则抛出IllegalArgumentException
。isNull(Object object, String message)
:确保对象为null
,否则抛出异常。isTrue(boolean expression, String message)
:判断布尔表达式是否为true
,否则抛出异常。notEmpty(Collection collection, String message)
:判断集合是否为空,否则抛出异常。hasLength(String text, String message)
:确保字符串有长度(即非空),否则抛出异常。hasText(String text, String message)
:确保字符串有实际内容(不只是空白符),否则抛出异常。
这些方法提供了有效的参数验证方式,并能自定义异常消息,增强代码的可读性。
对象、数组与集合操作
Spring 提供了丰富的工具类来处理对象、数组和集合操作。ObjectUtils
、StringUtils
、CollectionUtils
是其中的主要代表,它们简化了对常见数据类型的处理。
对象工具类(ObjectUtils
)
ObjectUtils
提供了一些对象的基本操作和判空处理。
isEmpty(Object obj)
:判断对象是否为空,支持Optional
、数组、Collection
、Map
等类型的判空。nullSafeClassName(Object obj)
:获取对象的类名,若对象为null
则返回 "null"。addObjectToArray(A[] array, O obj)
:向数组中追加元素并返回新数组。
字符串工具类(StringUtils
)
StringUtils
是常用的字符串操作工具类,提供了对字符串的操作和判断功能。
isEmpty(String str)
:判断字符串是否为空,空白符不算空。hasLength(CharSequence str)
:判断字符串是否有长度(不为null
且长度大于 0)。hasText(CharSequence str)
:判断字符串是否有实际内容,排除空白符。replace(String inString, String oldPattern, String newPattern)
:替换字符串中的子串。
集合工具类(CollectionUtils
)
CollectionUtils
提供了对集合(List
、Set
、Map
)的操作方法。
isEmpty(Collection<?> collection)
:判断集合是否为空。containsAny(Collection<?> source, Collection<?> candidates)
:判断源集合是否包含候选集合中的任意元素。findFirstMatch(Collection<?> source, Collection<?> candidates)
:返回集合中与候选集合匹配的第一个元素。
文件与资源操作
Spring 提供了 FileCopyUtils
和 ResourceUtils
等工具类,帮助开发者便捷地处理文件复制和资源加载。
文件复制工具类(FileCopyUtils
)
copy(byte[] in, File out)
:将字节数组写入文件。copyToByteArray(InputStream in)
:将输入流的内容读入字节数组。copy(InputStream in, OutputStream out)
:将输入流的数据复制到输出流中。
资源工具类(ResourceUtils
)
ResourceUtils
提供了处理资源文件和路径的方法。
isUrl(String resourceLocation)
:判断字符串是否为合法的 URL。getURL(String resourceLocation)
:将资源路径转换为 URL。getFile(String resourceLocation)
:获取指定路径的文件对象。
IO 流工具类(StreamUtils
)
StreamUtils
是一个专门用于处理输入输出流的工具类,简化了常见的 IO 操作。
copyToByteArray(InputStream in)
:将输入流的内容读取为字节数组。copyToString(InputStream in, Charset charset)
:将输入流内容转化为指定字符集的字符串。drain(InputStream in)
:舍弃输入流的内容。
反射工具类(ReflectionUtils
)
反射是 Java 提供的强大工具,Spring 的 ReflectionUtils
进一步简化了反射相关的操作,使开发者可以更轻松地操作类和方法。
findMethod(Class<?> clazz, String name)
:查找类中的指定方法。invokeMethod(Method method, Object target)
:调用目标对象的指定方法。makeAccessible(Method method)
:取消 Java 的权限检查,允许访问私有方法。
通过这些方法,开发者可以轻松处理反射相关操作,如获取和设置字段值、调用方法、获取类的构造函数等。
AOP 工具类
Spring 的 AOP 框架允许开发者对目标方法进行动态代理。AopUtils
和 AopContext
提供了一些便捷的工具方法,方便操作代理对象。
isAopProxy(Object obj)
:判断对象是否为 AOP 代理对象。getTargetClass(Object proxy)
:获取代理对象的目标类。currentProxy()
:获取当前正在执行的代理对象。
下面 我们开始详细的介绍下使用
1. Collections
Collections
是一个工具类,提供了许多静态方法来操作集合类。它包含了对集合进行排序、查找、反转、填充等操作的方法。
示例代码
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CollectionsExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("C");
list.add("A");
list.add("B");
// 排序
Collections.sort(list);
System.out.println("排序后的列表: " + list);
// 反转
Collections.reverse(list);
System.out.println("反转后的列表: " + list);
// 填充
Collections.fill(list, "X");
System.out.println("填充后的列表: " + list);
}
}
Collections.sort(list)
:对列表进行排序。Collections.reverse(list)
:反转列表中的元素顺序。Collections.fill(list, "X")
:将列表中的所有元素替换为指定的值。
2. CollectionUtils
CollectionUtils
是一个工具类,提供了许多静态方法来操作集合类。它包含了对集合进行交集、并集、差集等操作的方法。
示例代码
import org.apache.commons.collections4.CollectionUtils;
import java.util.Arrays;
import java.util.List;
public class CollectionUtilsExample {
public static void main(String[] args) {
List<String> list1 = Arrays.asList("A", "B", "C");
List<String> list2 = Arrays.asList("B", "C", "D");
// 交集
List<String> intersection = (List<String>) CollectionUtils.intersection(list1, list2);
System.out.println("交集: " + intersection);
// 并集
List<String> union = (List<String>) CollectionUtils.union(list1, list2);
System.out.println("并集: " + union);
// 差集
List<String> subtract = (List<String>) CollectionUtils.subtract(list1, list2);
System.out.println("差集: " + subtract);
}
}
CollectionUtils.intersection(list1, list2)
:计算两个集合的交集。CollectionUtils.union(list1, list2)
:计算两个集合的并集。CollectionUtils.subtract(list1, list2)
:计算两个集合的差集。
3. Lists
Lists
是一个工具类,提供了创建和操作 List
的静态方法。
示例代码
import com.google.common.collect.Lists;
import java.util.List;
public class ListsExample {
public static void main(String[] args) {
// 创建一个 ArrayList
List<String> list = Lists.newArrayList("A", "B", "C");
System.out.println("列表: " + list);
// 反转列表
List<String> reversedList = Lists.reverse(list);
System.out.println("反转后的列表: " + reversedList);
}
}
Lists.newArrayList("A", "B", "C")
:创建一个包含指定元素的ArrayList
。Lists.reverse(list)
:反转列表中的元素顺序。
4. Objects
Objects
是一个工具类,提供了许多静态方法来操作对象。它包含了对对象进行判空、比较等操作的方法。
示例代码
import java.util.Objects;
public class ObjectsExample {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "World";
// 判空
boolean isNull = Objects.isNull(str1);
System.out.println("str1 是否为空: " + isNull);
// 比较
boolean isEqual = Objects.equals(str1, str2);
System.out.println("str1 和 str2 是否相等: " + isEqual);
}
}
Objects.isNull(str1)
:判断对象是否为null
。Objects.equals(str1, str2)
:比较两个对象是否相等。
5. BooleanUtils
BooleanUtils
是一个工具类,提供了许多静态方法来操作布尔值。它包含了对布尔值进行转换、判断等操作的方法。
示例代码
import org.apache.commons.lang3.BooleanUtils;
public class BooleanUtilsExample {
public static void main(String[] args) {
boolean bool = true;
// 布尔值转换为字符串
String boolStr = BooleanUtils.toStringYesNo(bool);
System.out.println("布尔值转换为字符串: " + boolStr);
// 字符串转换为布尔值
boolean boolFromStr = BooleanUtils.toBoolean("true");
System.out.println("字符串转换为布尔值: " + boolFromStr);
}
}
BooleanUtils.toStringYesNo(bool)
:将布尔值转换为字符串("yes"
或"no"
)。BooleanUtils.toBoolean("true")
:将字符串转换为布尔值。
6. StringUtils
StringUtils
是一个工具类,提供了许多静态方法来操作字符串。它包含了对字符串进行判空、截取、替换等操作的方法。
示例代码
import org.apache.commons.lang3.StringUtils;
public class StringUtilsExample {
public static void main(String[] args) {
String str = "Hello, World!";
// 判空
boolean isEmpty = StringUtils.isEmpty(str);
System.out.println("字符串是否为空: " + isEmpty);
// 截取
String subStr = StringUtils.substring(str, 0, 5);
System.out.println("截取后的字符串: " + subStr);
// 替换
String replacedStr = StringUtils.replace(str, "World", "Java");
System.out.println("替换后的字符串: " + replacedStr);
}
}
StringUtils.isEmpty(str)
:判断字符串是否为空。StringUtils.substring(str, 0, 5)
:截取字符串的一部分。StringUtils.replace(str, "World", "Java")
:替换字符串中的指定内容。
7. Assert
Assert
是一个工具类,提供了许多静态方法来进行断言操作。它包含了对条件进行判断并抛出异常的方法。
示例代码
import org.springframework.util.Assert;
public class AssertExample {
public static void main(String[] args) {
String str = "Hello";
// 断言字符串不为空
Assert.notNull(str, "字符串不能为空");
System.out.println("字符串不为空");
// 断言字符串长度大于 0
Assert.isTrue(str.length() > 0, "字符串长度必须大于 0");
System.out.println("字符串长度大于 0");
}
}
Assert.notNull(str, "字符串不能为空")
:断言对象不为null
,否则抛出异常。Assert.isTrue(str.length() > 0, "字符串长度必须大于 0")
:断言条件为true
,否则抛出异常。
8. IOUtils
IOUtils
是一个工具类,提供了许多静态方法来操作输入输出流。它包含了对流进行读取、写入、关闭等操作的方法。
示例代码
import org.apache.commons.io.IOUtils;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class IOUtilsExample {
public static void main(String[] args) throws IOException {
FileInputStream inputStream = new FileInputStream("input.txt");
FileOutputStream outputStream = new FileOutputStream("output.txt");
// 读取文件内容
String content = IOUtils.toString(inputStream, "UTF-8");
System.out.println("文件内容: " + content);
// 写入文件内容
IOUtils.write(content, outputStream, "UTF-8");
// 关闭流
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(outputStream);
}
}
IOUtils.toString(inputStream, "UTF-8")
:从输入流中读取内容并转换为字符串。IOUtils.write(content, outputStream, "UTF-8")
:将字符串写入输出流。IOUtils.closeQuietly(inputStream)
:关闭输入流,忽略异常。
9. MDC
MDC
(Mapped Diagnostic Context)是一个工具类,用于在多线程环境中存储和传递上下文信息。它通常用于日志记录。
示例代码
import org.slf4j.MDC;
public class MDCExample {
public static void main(String[] args) {
// 设置 MDC 值
MDC.put("userId", "12345");
// 获取 MDC 值
String userId = MDC.get("userId");
System.out.println("用户ID: " + userId);
// 清除 MDC 值
MDC.clear();
}
}
MDC.put("userId", "12345")
:将键值对放入 MDC 中。MDC.get("userId")
:从 MDC 中获取指定键的值。MDC.clear()
:清除 MDC 中的所有键值对。
10. ClassUtils
ClassUtils
是一个工具类,提供了许多静态方法来操作类。它包含了对类进行加载、获取类名等操作的方法。
示例代码
import org.springframework.util.ClassUtils;
public class ClassUtilsExample {
public static void main(String[] args) {
// 获取类的简单名称
String simpleName = ClassUtils.getShortName(ClassUtilsExample.class);
System.out.println("类的简单名称: " + simpleName);
// 获取类的包名
String packageName = ClassUtils.getPackageName(ClassUtilsExample.class);
System.out.println("类的包名: " + packageName);
}
}
ClassUtils.getShortName(ClassUtilsExample.class)
:获取类的简单名称。ClassUtils.getPackageName(ClassUtilsExample.class)
:获取类的包名。
11. BeanUtils
BeanUtils
是一个工具类,提供了许多静态方法来操作 JavaBean。它包含了对 Bean 进行复制、获取属性等操作的方法。
示例代码
import org.springframework.beans.BeanUtils;
public class BeanUtilsExample {
public static void main(String[] args) {
User user1 = new User("Alice", 25);
User user2 = new User();
// 复制 Bean
BeanUtils.copyProperties(user1, user2);
System.out.println("复制后的用户: " + user2);
}
}
class User {
private String name;
private int age;
public User() {}
public User(String name, int age) {
this.name = name;
this.age = age;
}
// Getter 和 Setter 方法
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
BeanUtils.copyProperties(user1, user2)
:将user1
的属性复制到user2
。
12. ReflectionUtils
ReflectionUtils
是一个工具类,提供了许多静态方法来操作反射。它包含了对类、方法、字段等进行反射操作的方法。
示例代码
import org.springframework.util.ReflectionUtils;
import java.lang.reflect.Field;
public class ReflectionUtilsExample {
public static void main(String[] args) {
User user = new User("Alice", 25);
// 获取字段
Field field = ReflectionUtils.findField(User.class, "name");
ReflectionUtils.makeAccessible(field);
// 设置字段值
ReflectionUtils.setField(field, user, "Bob");
System.out.println("修改后的用户: " + user);
}
}
class User {
private String name;
private int age;
public User() {}
public User(String name, int age) {
this.name = name;
this.age = age;
}
// Getter 和 Setter 方法
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
ReflectionUtils.findField(User.class, "name")
:查找指定类的字段。ReflectionUtils.makeAccessible(field)
:使字段可访问。ReflectionUtils.setField(field, user, "Bob")
:设置字段的值。
13. Base64Utils
Base64Utils
是一个工具类,提供了许多静态方法来操作 Base64 编码。它包含了对字符串进行编码和解码的方法。
示例代码
import org.springframework.util.Base64Utils;
public class Base64UtilsExample {
public static void main(String[] args) {
String original = "Hello, World!";
// 编码
String encoded = Base64Utils.encodeToString(original.getBytes());
System.out.println("编码后的字符串: " + encoded);
// 解码
String decoded = new String(Base64Utils.decodeFromString(encoded));
System.out.println("解码后的字符串: " + decoded);
}
}
Base64Utils.encodeToString(original.getBytes())
:将字符串编码为 Base64。Base64Utils.decodeFromString(encoded)
:将 Base64 字符串解码为原始字符串。
14. StandardCharsets
StandardCharsets
是一个工具类,提供了许多静态字段来表示标准的字符编码。它包含了对字符编码进行常量定义的方法。
示例代码
import java.nio.charset.StandardCharsets;
public class StandardCharsetsExample {
public static void main(String[] args) {
String str = "Hello, World!";
// 使用 UTF-8 编码
byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
System.out.println("UTF-8 编码后的字节数组: " + bytes);
// 使用 UTF-16 编码
byte[] bytesUtf16 = str.getBytes(StandardCharsets.UTF_16);
System.out.println("UTF-16 编码后的字节数组: " + bytesUtf16);
}
}
StandardCharsets.UTF_8
:表示 UTF-8 字符编码。StandardCharsets.UTF_16
:表示 UTF-16 字符编码。
15. DigestUtils
DigestUtils
是一个工具类,提供了许多静态方法来生成摘要(如 MD5、SHA 等)。它包含了对字符串或字节数组进行摘要计算的方法。
示例代码
import org.springframework.util.DigestUtils;
public class DigestUtilsExample {
public static void main(String[] args) {
String original = "Hello, World!";
// 计算 MD5 摘要
String md5Digest = DigestUtils.md5DigestAsHex(original.getBytes());
System.out.println("MD5 摘要: " + md5Digest);
// 计算 SHA-256 摘要
String sha256Digest = DigestUtils.sha256DigestAsHex(original.getBytes());
System.out.println("SHA-256 摘要: " + sha256Digest);
}
}
DigestUtils.md5DigestAsHex(original.getBytes())
:计算字符串的 MD5 摘要,并返回十六进制字符串。DigestUtils.sha256DigestAsHex(original.getBytes())
:计算字符串的 SHA-256 摘要,并返回十六进制字符串。
16. SerializationUtils
SerializationUtils
是一个工具类,提供了许多静态方法来序列化和反序列化对象。它包含了对对象进行序列化和反序列化操作的方法。
示例代码
import org.springframework.util.SerializationUtils;
import java.io.Serializable;
public class SerializationUtilsExample {
public static void main(String[] args) {
User user = new User("Alice", 25);
// 序列化对象
byte[] serializedUser = SerializationUtils.serialize(user);
System.out.println("序列化后的字节数组: " + serializedUser);
// 反序列化对象
User deserializedUser = (User) SerializationUtils.deserialize(serializedUser);
System.out.println("反序列化后的用户: " + deserializedUser);
}
}
class User implements Serializable {
private String name;
private int age;
public User() {}
public User(String name, int age) {
this.name = name;
this.age = age;
}
// Getter 和 Setter 方法
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
SerializationUtils.serialize(user)
:将对象序列化为字节数组。SerializationUtils.deserialize(serializedUser)
:将字节数组反序列化为对象。
17. HttpStatus
HttpStatus
是一个枚举类,提供了许多静态字段来表示 HTTP 状态码。它包含了对 HTTP 状态码进行常量定义的方法。
示例代码
import org.springframework.http.HttpStatus;
public class HttpStatusExample {
public static void main(String[] args) {
// 获取 HTTP 状态码
HttpStatus status = HttpStatus.OK;
System.out.println("HTTP 状态码: " + status.value());
// 获取 HTTP 状态码的描述
String reasonPhrase = status.getReasonPhrase();
System.out.println("HTTP 状态码描述: " + reasonPhrase);
}
}
HttpStatus.OK
:表示 HTTP 状态码 200。status.value()
:获取 HTTP 状态码的数值。status.getReasonPhrase()
:获取 HTTP 状态码的描述。
版权声明:本文为原创文章,版权归 全栈开发技术博客 所有。
本文链接:https://www.lvtao.net/dev/springboot-util.html
转载时须注明出处及本声明