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 提供了丰富的工具类来处理对象、数组和集合操作。ObjectUtilsStringUtilsCollectionUtils 是其中的主要代表,它们简化了对常见数据类型的处理。

对象工具类(ObjectUtils

ObjectUtils 提供了一些对象的基本操作和判空处理。

  • isEmpty(Object obj):判断对象是否为空,支持 Optional、数组、CollectionMap 等类型的判空。
  • 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 提供了对集合(ListSetMap)的操作方法。

  • isEmpty(Collection<?> collection):判断集合是否为空。
  • containsAny(Collection<?> source, Collection<?> candidates):判断源集合是否包含候选集合中的任意元素。
  • findFirstMatch(Collection<?> source, Collection<?> candidates):返回集合中与候选集合匹配的第一个元素。

文件与资源操作

Spring 提供了 FileCopyUtilsResourceUtils 等工具类,帮助开发者便捷地处理文件复制和资源加载。

文件复制工具类(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 框架允许开发者对目标方法进行动态代理。AopUtilsAopContext 提供了一些便捷的工具方法,方便操作代理对象。

  • 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 状态码的描述。

标签: Java

相关文章

如何使用Go编写跨平台组件并让Java或PHP调用

在现代软件开发中,跨语言调用是一个常见的需求。假设我们有一个用Go语言编写的组件,我们希望Java或PHP能够直接调用这个组件中对外提供的方法。为了实现这一目标,我们可以使用以下几种方法:1. ...

linux下或macOS中配置maven及加速

下载 Maven 压缩包:访问 Maven 官方下载页面,下载你需要的版本。解压压缩包:将下载的压缩包解压到你选择的目录,例如 /opt/maven:sudo mkdir -p /opt/mav...

javax.validation中数据验证的注解使用与示例

javax.validation 是 Java 提供的一个用于数据验证的库,其中定义了多种用于约束和验证数据的注解。下面对常用的验证注解类进行详细介绍,并提供对应的使用示例,每个注解都配有中文注...

编译最新的kkFileView并使用docker打包

kkFileView 是一个开源的文件预览服务,支持多种文件格式的在线预览。本文将详细介绍如何编译 kkFileView 的最新版本,并将其打包成 Docker 镜像。1. 环境准备在开始之前,...

JAVA+VUE的多国语言跨境电商外贸商城源码

多语言跨境电商外贸商城TikTok内嵌商城,商家入驻、一键铺货、一键提货 全开源完美运营海外版抖音TikTok商城系统源码,TikToK内嵌商城,跨境商城系统源码接在tiktok里面的商城。ti...

图片Base64编码

CSR生成

图片无损放大

图片占位符

Excel拆分文件