Spring Framework spring-core 核心包工具类

目录

Assert 断言工具类

ObjectUtils 对象工具类

Base64Utils Base64 编解码工具类

DigestUtils 摘要工具类

StringUtils 字符串工具类

FileSystemUtils 文件系统工具类

CollectionUtils 集合工具类

SerializationUtils 序列化工具类


1、现在的 Java 开发基本离不开 springframework,而其中 spring-core-x.x.x.RELEASE.jar 核心包下提供了很多实用的工具类,开发中可以直接使用,没必要再自己重复的造轮子。

2、个人觉得 org.springframework.util 包下面的工具类与 apache 提供的工具类虽然大部分相差无几,但还是有互补的地方,开发中基本能满足常用的工具类使用。

Assert 断言工具类

1、org.springframework.util.Assert专门用于校验参数是否合法,不合法时抛出 "IllegalArgumentException-非法参数异常"

//比如断言参数不能为 null,Assert 源码如下:
public static void isNull(@Nullable Object object, String message) {
    if (object != null) {
        throw new IllegalArgumentException(message);
    }
}

2、Assert 中提供了常用的参数校验,从方法名字就能一目了然,汇总如下:

方法 描述
doesNotContain(@Nullable String textToSearch, String substring, String message)

1、断言给定的文本(textToSearch)不包含给定的子字符串(substring),

2、如果 textToSearch 包含子字符串(substring),则抛异常 IllegalArgumentException

3、message:断言失败时要使用的异常消息

hasLength(@Nullable String text, String message)

1、断言给定的字符串不是空的,空格不算作空,

2、如果文本为空,或者为 null,则抛出 IllegalArgumentException

hasText(@Nullable String text, String message)

1、断言给定的字符串包含有效的文本内容;text 不能是 null,且必须至少包含一个非空白字符。

2、如果 text 不包含有效的文本内容,则抛出 IllegalArgumentException

isAssignable(Class<?> superType, @Nullable Class<?> subType, String message)

1、断言 subType 是否为 superType 的子类型,如果不是则抛出 IllegalArgumentException 异常。

2、注意必须是子类型,同一类型也会报错

isInstanceOf(Class<?> type, @Nullable Object obj, String message)

1、断言所提供的对象(obj)是所提供类(type)的实例。

2、如果对象不是类型的实例,则抛出 IllegalArgumentException

isNull(@Nullable Object object, String message) 1、断言对象(object)是 null,如果不是 null,则抛出 IllegalArgumentException
notNull(@Nullable Object object, String message) 1、断言对象不是 null,如果是 null,则抛出 IllegalArgumentException
isTrue(boolean expression, String message)

1、断言布尔表达式,如果表达式计算结果为 false,则抛出{@link IllegalArgumentException}。

2、message:断言失败时要使用的异常消息

state(boolean expression, String message)

1、断言布尔表达式,如果表达式的计算结果为 false,则抛出 IllegalArgumentException。

2、和 {@link Assert#isTrue(boolean, java.lang.String)} 实现的效果一致.

noNullElements(@Nullable Object[] array, String message)

1、断言数组不包含 null 元素。

2、array 可以为 null,可以为空,有元素时,只要有一个为 null,则抛出 IllegalArgumentException

notEmpty(@Nullable Collection<?> collection, String message) 1、断言集合包含元素,即不能为 null,也不能为空,必须至少包含一个元素,否则抛出 IllegalArgumentException
notEmpty(@Nullable Map<?, ?> map, String message) 断言 Map 包含元素,即不能为 null,也不能为空,必须至少包含一个元素,否则抛出 IllegalArgumentException
notEmpty(@Nullable Object[] array, String message) 断言 array 包含元素,即不能为 null,也不能为空,必须至少包含一个元素,否则抛出 IllegalArgumentException

在线源码查看:https://github.com/wangmaoxiong/apache-study/blob/master/src/main/java/com/wmx/spring/AssertTest.java

ObjectUtils 对象工具类

1、org.springframework.util.ObjectUtils 是 spring-core-x.x.x.RELEASE.jar 核心包下提供的对象工具类,除了提供功能封装之外,还有一个好处就是老板再也不用担心空指针异常。

2、其常用方法如下:

方法 描述
boolean containsElement(@Nullable Object[] array, Object element) 1、检测数组中是否包含指定的元素,array 为 null 时恒为 false
String getDisplayString(@Nullable Object obj)

1、将对象转为可视化的字符串,如果 obj 为 null,则恒返回空字符串""。

2、底层也是调用 {@link ObjectUtils#nullSafeToString(java.lang.Object)} 方法

String getIdentityHexString(Object obj) 1、获取对象唯一的十六进制字符串,实质是将对象的哈希code转成了十六进制字符串
String identityToString(@Nullable Object obj)

1、获取对象的整体标识,obj.getClass().getName() + "@" + getIdentityHexString(obj);

2、如果 obj 为 null,则恒返回空字符串 ""

boolean isArray(@Nullable Object obj) 1、判断对象是否为数组,为 null 时恒返回 false
boolean isCheckedException(Throwable ex)

1、判断异常是否为受检查异常类型,源码为:!(ex instanceof RuntimeException ex instanceof Error)。

2、即不是运行时异常,也不是 Error 时,则判定 ex 为受检查异常

boolean isCompatibleWithThrowsClause(Throwable ex, @Nullable Class<?>... declaredExceptions)

1、判断受检查异常(ex)是否为指定的异常类型。

2、如果 ex 为运行时异常(RuntimeException)或者为 Error,则恒返回 true

boolean isEmpty(@Nullable Object obj)

1、检测对象是否为空,如果为 null 或者为空,则返回 true,字符串的空格不算空,返回 false.。

2、支持以下类型:{@link Optional}、Array、{@link CharSequence}、{@link Collection}、{@link Map}

boolean isEmpty(@Nullable Object[] array) 1、检查数组是否为空,源码:return (array == null || array.length == 0)
String nullSafeClassName(@Nullable Object obj) 1、获取对象的 className 值,当 obj 为 null 时返回字符串 "null"
boolean nullSafeEquals(@Nullable Object o1, @Nullable Object o2)

1、检查两个对象是否相等,当其中任意一个为 null,另一个不为 null 时,恒返回 false。

2、先根据 "==" 判断,然后判断是否其中一个为 null,接着使用 o1.equals(o2) 比较,然后如果两个对象都是数组,则逐个比较其中的元素是否相等,前面4步都判断不出来,则返回false.

int nullSafeHashCode(@Nullable Object obj) 1、获取对象的 哈希 code 值,如果 obj 为null,则返回 0
String nullSafeToString(@Nullable Object obj) 1、返回对象的字符串表现形式,如果 obj 为 null,则返回字符串 "null"

在线源码:https://github.com/wangmaoxiong/apache-study/blob/master/src/main/java/com/wmx/spring/ObjectUtilsTest.java

Base64Utils Base64 编解码工具类

import org.springframework.util.Base64Utils;
/**
 * @author wangMaoXiong
 * @version 1.0
 * @date 2020/6/21 12:23
 */
public class Base64UtilsTest {

    /**
     * 解码:
     * byte[] decode(byte[] src)
     * byte[] decodeFromString(String src)
     * byte[] decodeFromUrlSafeString(String src)
     * byte[] decodeUrlSafe(byte[] src)
     * 编码:
     * byte[] encode(byte[] src)
     * String encodeToString(byte[] src)
     * String encodeToUrlSafeString(byte[] src)
     * byte[] encodeUrlSafe(byte[] src)
     *
     * @param args
     */
    public static void main(String[] args) {
        String pass = "123456ppx";
        String encodeToString = Base64Utils.encodeToString(pass.getBytes());
        byte[] decodeFromString = Base64Utils.decodeFromString(encodeToString);

        //源内容:123456ppx
        System.out.println("源内容:" + pass);
        //编码后:MTIzNDU2cHB4
        System.out.println("编码后:" + encodeToString);
        //解码后:123456ppx
        System.out.println("解码后:" + new String(decodeFromString));
    }
}

DigestUtils 摘要工具类

方法 描述
byte[] md5Digest(byte[] bytes) 1、对字节数组提取 md5 摘要,返回字节数组
byte[] md5Digest(InputStream inputStream) 2、对字节输入流提取 md5 摘要,返回字节数组,适合对文件进去提取摘要
String md5DigestAsHex(byte[] bytes) 3、对字节数组提取 md5 摘要,以16进制字符串返回
String md5DigestAsHex(InputStream inputStream) 4、对字节输入流提取 md5 摘要,以16进制字符串返回,适合对文件进去提取摘要

在线源码:https://github.com/wangmaoxiong/apache-study/blob/master/src/main/java/com/wmx/spring/Base64UtilsTest.java

StringUtils 字符串工具类

方法 描述
String[] addStringToArray(@Nullable String[] array, String str)

1、往数组中添加元素,数组的大小是固定的,底层是使用 System.arraycopy 将旧数组复制到新数组,所以返回值是添加后的新数组。

2、array 等于 null 或者为空时,会自动创建

String arrayToCommaDelimitedString(@Nullable Object[] arr) 1、将数组转成字符串,元素之间默认使用 "," 连接, arr 为 null 或者为空时,返回空字符串
String arrayToDelimitedString(@Nullable Object[] arr, String delim) 1、将数组转成字符串,并使用指定的字符串进行连接
String capitalize(String str) 1、将字符串的首字母转大写,如果 str 为null或者为空,则原样返回
String collectionToCommaDelimitedString(@Nullable Collection<?> coll) 1、将集合转为字符串,元素之间默认使用 "," 连接,如果 coll 为null或者为空,则返回空字符串
String collectionToDelimitedString(@Nullable Collection<?> coll, String delim) 2、将集合转为字符串,元素之间使用指定字符串连接,如果 coll 为null或者为空,则返回空字符串
String collectionToDelimitedString(@Nullable Collection<?> coll, String delim, String prefix, String suffix)

1、将集合(coll)转为字符串,使用指定字符串(delim)连接元素。

2、prefix、suffix 是连接元素时使用前缀与后缀,源码:sb.append(prefix).append(item.next()).append(suffix);

3、所以非常适合用于连接数据库 in 函数的参数,如: in('99pp','887uy','67tf')。4、如果 coll 为null或者为空,则返回空字符串

Set commaDelimitedListToSet(@Nullable String str)

1、将字符串转为 Set,元素使用英文","符号隔开,如果 str 为 null,则返回空集合。

2、返回的集合为 LinkedHashSet

String[] commaDelimitedListToStringArray(@Nullable String str) 1、将字符串转为 数组,元素使用英文","符号隔开,如果 str 为 null,则返回空数组
String[] delimitedListToStringArray(@Nullable String str, @Nullable String delimiter) 1、将字符串转为 数组,元素使用指定字符串符号隔开,如果 str 为 null,则返回空数组
String[] concatenateStringArrays(@Nullable String[] array1, @Nullable String[] array2)

1、将两个数组的元素合二为一,成为一个新数组。

2、源码的思路是:如果 array1 为空或者为 null,则直接返回 array2,如果 array2 为空或者为null,则直接返回 array1,最后使用 System.arraycopy 的方式复制新数组

boolean containsWhitespace(@Nullable CharSequence str) 1、检查 str 是否含有空格,空字符串与 null 不算空格
boolean containsWhitespace(@Nullable String str) 1、检查 str 是否含有空格,空字符串与 null 不算空格
int countOccurrencesOf(String str, String sub) 1、检查源字符串(str) 中字符串(sub)出现的次数,如果 str 或者 sub 任意一个为空或者为null,则返回0
String getFilename(@Nullable String path)

1、获取字符串中的文件名称,如 "mypath/myfile.txt" -> "myfile.txt"。

2、如果 path 为 null,则返回 null。路径必须是左斜杠,源码是 path.lastIndexOf("/") 分割取值

String getFilenameExtension(@Nullable String path)

1、获取文件格式,如 "mypath/myfile.txt" -> "txt"。

2、源码: path.lastIndexOf(".") 分割取值

boolean hasLength(@Nullable CharSequence str) 1、检查字符序列是否有长度, str为null或者为空,返回false,否则为true,空格也算有长度
boolean hasLength(@Nullable String str) 1、检查字符串是否有长度, str为null或者为空,返回false,否则为true,空格也算有长度
boolean hasText(@Nullable CharSequence str) 1、检查 str 是否有文本值,空格不算文本,所以 str 为null或者为空,或者空格,都返回 false
boolean hasText(@Nullable String str) 1、检查 str 是否有文本值,空格不算文本,所以 str 为null或者为空,或者空格,都返回 false
boolean isEmpty(@Nullable Object str) 1、判断对象是否为空,或者为nul,源码:(str == null || "".equals(str))
String[] sortStringArray(String[] array)

1、对数组的中元素进行排序,如果 array 为null或者为空,则返回空数组。

2、数字在前,单词次之,汉字最末,根据 ascii 码排序,底层用的 Arrays.sort(array)

String[] toStringArray(Collection collection) 1、将 {@link Collection} 转为数组
String[] toStringArray(Enumeration enumeration) 1、将 {@link Enumeration} 转为数组
String trimAllWhitespace(String str) 去掉 str 中的所有空格
String[] trimArrayElements(String[] array) 去掉数组中所有元素前后的空格

在线源码:https://github.com/wangmaoxiong/apache-study/blob/master/src/main/java/com/wmx/spring/StringUtilsTest.java

FileSystemUtils 文件系统工具类

方法 描述

void copyRecursively(File src, File dest)

void  copyRecursively(Path src, Path dest)

1、递归复制源文件或者目录到目标文件或目录,底层使用 {@link Files#copy(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...)}

2、src、dest 不能为 null,否则非法参数异常。3、src 不存在时抛异常,dest 不存在时会自动创建

boolean deleteRecursively(@Nullable File root)

boolean deleteRecursively(@Nullable Path root)

1、递归删除,root 为null,或者不存在,都返回 false。底层使用 {@link Files#delete(java.nio.file.Path)}

在线源码:https://github.com/wangmaoxiong/apache-study/blob/master/src/main/java/com/wmx/spring/FileSystemUtilsTest.java

CollectionUtils 集合工具类

 

方法 描述
boolean contains(@Nullable Enumeration<?> enumeration, Object element) 1、检查 enumeration、iterator 中是否含有指定的元素,底层使用 {@link ObjectUtils#nullSafeEquals(java.lang.Object, java.lang.Object)}
2、如果 iterator 为 null,则直接返回 false
boolean contains(@Nullable Iterator<?> iterator, Object element)
Class<?> findCommonElementType(Collection<?> collection)

1、获取集合中公共的元素类型,集合为null或者为空时,返回 null。

2、集合中元素如果有多种类型,则返回 null,会遍历其中某一个元素

boolean isEmpty(@Nullable Collection<?> collection)
boolean isEmpty(@Nullable Map<?, ?> map)
1、判断集合或者map是否为null或者为空,源码:(collection == null || collection.isEmpty())
void mergeArrayIntoCollection(@Nullable Object array, Collection collection) 1、将数组元素添加到集合中
void mergePropertiesIntoMap(@Nullable Properties props, Map<K, V> map) 1、将属性文件(props)中的值添加/提取到 map 中

在线源码:https://github.com/wangmaoxiong/apache-study/blob/master/src/main/java/com/wmx/spring/CollectionUtilsTest.java

SerializationUtils 序列化工具类

1、byte[] serialize(@Nullable Object object):对象序列化

2、Object deserialize(@Nullable byte[] bytes):对象反序列化

import com.wmx.apachestudy.pojo.Person;
import org.springframework.util.SerializationUtils;
import java.util.Date;
/**
 * @author wangMaoXiong
 * @version 1.0
 * @date 2020/6/21 13:56
 */
public class SerializationUtilsTest {

    public static void main(String[] args) {
        //被序列化的实体必须 implements Serializable 接口
        Person person = new Person(1001,"华安",new Date(),8998.87f);
        byte[] serialize = SerializationUtils.serialize(person);
        Object deserialize = SerializationUtils.deserialize(serialize);
        System.out.println(deserialize);
    }
}

在线源码 https://github.com/wangmaoxiong/apache-study/blob/master/src/main/java/com/wmx/spring/SerializationUtilsTest.java

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章