0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Spring Boot 内置工具类功能

Android编程精选 来源:Android编程精选 作者:Android编程精选 2022-10-24 14:57 次阅读

断言

对象、数组、集合

ObjectUtils

StringUtils

CollectionUtil

文件、资源、IO 流

FileCopyUtils

ResourceUtils

StreamUtils

反射、AOP

ReflectionUtils

AopUtils

AopContext

最近发现同事写了不少重复的工具类,发现其中很多功能,Spring 自带的都有。于是整理了本文,希望能够帮助到大家!

断言

断言是一个逻辑判断,用于检查不应该发生的情况

Assert 关键字在 JDK1.4 中引入,可通过 JVM 参数-enableassertions开启

SpringBoot 中提供了 Assert 断言工具类,通常用于数据合法性检查

//要求参数object必须为非空(NotNull),否则抛出异常,不予放行
//参数 message 参数用于定制异常信息。
voidnotNull(Objectobject,Stringmessage)
//要求参数必须空(Null),否则抛出异常,不予『放行』。
//和notNull()方法断言规则相反
voidisNull(Objectobject,Stringmessage)
//要求参数必须为真(True),否则抛出异常,不予『放行』。
voidisTrue(booleanexpression,Stringmessage)
//要求参数(List/Set)必须非空(NotEmpty),否则抛出异常,不予放行
voidnotEmpty(Collectioncollection,Stringmessage)
//要求参数(String)必须有长度(即,NotEmpty),否则抛出异常,不予放行
voidhasLength(Stringtext,Stringmessage)
//要求参数(String)必须有内容(即,NotBlank),否则抛出异常,不予放行
voidhasText(Stringtext,Stringmessage)
//要求参数是指定类型的实例,否则抛出异常,不予放行
voidisInstanceOf(Classtype,Objectobj,Stringmessage)
//要求参数`subType`必须是参数superType的子类或实现类,否则抛出异常,不予放行
voidisAssignable(ClasssuperType,ClasssubType,Stringmessage)

对象、数组、集合

ObjectUtils

获取对象的基本信息

//获取对象的类名。参数为 null 时,返回字符串:"null"
StringnullSafeClassName(Objectobj)
//参数为null时,返回0
intnullSafeHashCode(Objectobject)
//参数为 null 时,返回字符串:"null"
StringnullSafeToString(boolean[]array)
//获取对象 HashCode(十六进制形式字符串)。参数为 null 时,返回0
StringgetIdentityHexString(Objectobj)
//获取对象的类名和 HashCode。参数为 null 时,返回字符串:""
StringidentityToString(Objectobj)
//相当于 toString()方法,但参数为 null 时,返回字符串:""
StringgetDisplayString(Objectobj)

判断工具

//判断数组是否为空
booleanisEmpty(Object[]array)
//判断参数对象是否是数组
booleanisArray(Objectobj)
//判断数组中是否包含指定元素
booleancontainsElement(Object[]array,Objectelement)
//相等,或同为null时,返回true
booleannullSafeEquals(Objecto1,Objecto2)
/*
判断参数对象是否为空,判断标准为:
Optional:Optional.empty()
Array:length==0
CharSequence:length==0
Collection:Collection.isEmpty()
Map:Map.isEmpty()
*/
booleanisEmpty(Objectobj)

其他工具方法

//向参数数组的末尾追加新元素,并返回一个新数组
A[]addObjectToArray(A[]array,Oobj)
//原生基础类型数组-->包装类数组
Object[]toObjectArray(Objectsource)

StringUtils

字符串判断工具

//判断字符串是否为null,或""。注意,包含空白符的字符串为非空
booleanisEmpty(Objectstr)
//判断字符串是否是以指定内容结束。忽略大小写
booleanendsWithIgnoreCase(Stringstr,Stringsuffix)
//判断字符串是否已指定内容开头。忽略大小写
booleanstartsWithIgnoreCase(Stringstr,Stringprefix)
//是否包含空白符
booleancontainsWhitespace(Stringstr)
//判断字符串非空且长度不为0,即,NotEmpty
booleanhasLength(CharSequencestr)
//判断字符串是否包含实际内容,即非仅包含空白符,也就是NotBlank
booleanhasText(CharSequencestr)
//判断字符串指定索引处是否包含一个子串。
booleansubstringMatch(CharSequencestr,intindex,CharSequencesubstring)
//计算一个字符串中指定子串的出现次数
intcountOccurrencesOf(Stringstr,Stringsub)

字符串操作工具

//查找并替换指定子串
Stringreplace(StringinString,StringoldPattern,StringnewPattern)
//去除尾部的特定字符
StringtrimTrailingCharacter(Stringstr,chartrailingCharacter)
//去除头部的特定字符
StringtrimLeadingCharacter(Stringstr,charleadingCharacter)
//去除头部的空白符
StringtrimLeadingWhitespace(Stringstr)
//去除头部的空白符
StringtrimTrailingWhitespace(Stringstr)
//去除头部和尾部的空白符
StringtrimWhitespace(Stringstr)
//删除开头、结尾和中间的空白符
StringtrimAllWhitespace(Stringstr)
//删除指定子串
Stringdelete(StringinString,Stringpattern)
//删除指定字符(可以是多个)
StringdeleteAny(StringinString,StringcharsToDelete)
//对数组的每一项执行trim()方法
String[]trimArrayElements(String[]array)
//将URL字符串进行解码
StringuriDecode(Stringsource,Charsetcharset)

路径相关工具方法

//解析路径字符串,优化其中的“..”
StringcleanPath(Stringpath)
//解析路径字符串,解析出文件名部分
StringgetFilename(Stringpath)
//解析路径字符串,解析出文件后缀名
StringgetFilenameExtension(Stringpath)
//比较两个两个字符串,判断是否是同一个路径。会自动处理路径中的“..”
booleanpathEquals(Stringpath1,Stringpath2)
//删除文件路径名中的后缀部分
StringstripFilenameExtension(Stringpath)
//以“.作为分隔符,获取其最后一部分
Stringunqualify(StringqualifiedName)
//以指定字符作为分隔符,获取其最后一部分
Stringunqualify(StringqualifiedName,charseparator)

CollectionUtils

集合判断工具

//判断List/Set是否为空
booleanisEmpty(Collectioncollection)
//判断Map是否为空
booleanisEmpty(Mapmap)
//判断List/Set中是否包含某个对象
booleancontainsInstance(Collectioncollection,Objectelement)
//以迭代器的方式,判断List/Set中是否包含某个对象
booleancontains(Iteratoriterator,Objectelement)
//判断List/Set是否包含某些对象中的任意一个
booleancontainsAny(Collectionsource,Collectioncandidates)
//判断 List/Set 中的每个元素是否唯一。即 List/Set 中不存在重复元素
booleanhasUniqueObject(Collectioncollection)

集合操作工具

//将Array中的元素都添加到List/Set中
voidmergeArrayIntoCollection(Objectarray,Collectioncollection)
//将Properties中的键值对都添加到Map中
voidmergePropertiesIntoMap(Propertiesprops,Mapmap)
//返回List中最后一个元素
TlastElement(Listlist)
//返回Set中最后一个元素
TlastElement(Setset)
//返回参数candidates中第一个存在于参数source中的元素
EfindFirstMatch(Collectionsource,Collectioncandidates)
//返回 List/Set 中指定类型的元素。
TfindValueOfType(Collectioncollection,Classtype)
//返回 List/Set 中指定类型的元素。如果第一种类型未找到,则查找第二种类型,以此类推
ObjectfindValueOfType(Collectioncollection,Class[]types)
//返回List/Set中元素的类型
ClassfindCommonElementType(Collectiocollection)

文件、资源、IO 流

FileCopyUtils

输入

//从文件中读入到字节数组中
byte[]copyToByteArray(Filein)
//从输入流中读入到字节数组中
byte[]copyToByteArray(InputStreamin)
//从输入流中读入到字符串中
StringcopyToString(Readerin)

输出

//从字节数组到文件
voidcopy(byte[]in,Fileout)
//从文件到文件
intcopy(Filein,Fileout)
//从字节数组到输出流
voidcopy(byte[]in,OutputStreamout)
//从输入流到输出流
intcopy(InputStreamin,OutputStreamout)
//从输入流到输出流
intcopy(Readerin,Writerout)
//从字符串到输出流
voidcopy(Stringin,Writerout)

ResourceUtils

从资源路径获取文件

//判断字符串是否是一个合法的 URL 字符串。
staticbooleanisUrl(StringresourceLocation)
//获取URL
staticURLgetURL(StringresourceLocation)
//获取文件(在JAR包内无法正常使用,需要是一个独立的文件)
staticFilegetFile(StringresourceLocation)

Resource

//文件系统资源D:...
FileSystemResource
//URL资源,如file://...http://...
UrlResource
//类路径下的资源,classpth:...
ClassPathResource
//Web容器上下文中的资源(jar包、war包)
ServletContextResource
//判断资源是否存在
booleanexists()
//从资源中获得File对象
FilegetFile()
//从资源中获得URI对象
URIgetURI()
//从资源中获得URI对象
URLgetURL()
//获得资源的InputStream
InputStreamgetInputStream()
//获得资源的描述信息
StringgetDescription()

StreamUtils

输入

voidcopy(byte[]in,OutputStreamout)
intcopy(InputStreamin,OutputStreamout)
voidcopy(Stringin,Charsetcharset,OutputStreamout)
longcopyRange(InputStreamin,OutputStreamout,longstart,longend)

输出

byte[]copyToByteArray(InputStreamin)
StringcopyToString(InputStreamin,Charsetcharset)
//舍弃输入流中的内容
intdrain(InputStreamin)

反射、AOP

ReflectionUtils

获取方法

//在类中查找指定方法
MethodfindMethod(Classclazz,Stringname)
//同上,额外提供方法参数类型作查找条件
MethodfindMethod(Classclazz,Stringname,Class...paramTypes)
//获得类中所有方法,包括继承而来的
Method[]getAllDeclaredMethods(ClassleafClass)
//在类中查找指定构造方法
ConstructoraccessibleConstructor(Classclazz,Class...parameterTypes)
//是否是equals()方法
booleanisEqualsMethod(Methodmethod)
//是否是hashCode()方法
booleanisHashCodeMethod(Methodmethod)
//是否是toString()方法
booleanisToStringMethod(Methodmethod)
//是否是从Object类继承而来的方法
booleanisObjectMethod(Methodmethod)
//检查一个方法是否声明抛出指定异常
booleandeclaresException(Methodmethod,ClassexceptionType)

执行方法

//执行方法
ObjectinvokeMethod(Methodmethod,Objecttarget)
//同上,提供方法参数
ObjectinvokeMethod(Methodmethod,Objecttarget,Object...args)
//取消 Java 权限检查。以便后续执行该私有方法
voidmakeAccessible(Methodmethod)
//取消 Java 权限检查。以便后续执行私有构造方法
voidmakeAccessible(Constructorctor)

获取字段

//在类中查找指定属性
FieldfindField(Classclazz,Stringname)
//同上,多提供了属性的类型
FieldfindField(Classclazz,Stringname,Classtype)
//是否为一个"publicstaticfinal"属性
booleanisPublicStaticFinal(Fieldfield)

设置字段

//获取target对象的field属性值
ObjectgetField(Fieldfield,Objecttarget)
//设置target对象的field属性值,值为value
voidsetField(Fieldfield,Objecttarget,Objectvalue)
//同类对象属性对等赋值
voidshallowCopyFieldState(Objectsrc,Objectdest)
//取消 Java 的权限控制检查。以便后续读写该私有属性
voidmakeAccessible(Fieldfield)
//对类的每个属性执行callback
voiddoWithFields(Classclazz,ReflectionUtils.FieldCallbackfc)
//同上,多了个属性过滤功能。
voiddoWithFields(Classclazz,ReflectionUtils.FieldCallbackfc,
ReflectionUtils.FieldFilterff)
//同上,但不包括继承而来的属性
voiddoWithLocalFields(Classclazz,ReflectionUtils.FieldCallbackfc)

AopUtils

判断代理类型

//判断是不是Spring代理对象
booleanisAopProxy()
//判断是不是jdk动态代理对象
isJdkDynamicProxy()
//判断是不是CGLIB代理对象
booleanisCglibProxy()

获取被代理对象的 class

//获取被代理的目标class
ClassgetTargetClass()

AopContext

获取当前对象的代理对象

ObjectcurrentProxy()




审核编辑:彭静

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    7030

    浏览量

    89037
  • spring
    +关注

    关注

    0

    文章

    340

    浏览量

    14344

原文标题:别再自己瞎写工具类了,Spring Boot 内置工具类应有尽有, 建议收藏!!

文章出处:【微信号:AndroidPush,微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Spring Boot如何实现异步任务

    ,用来告诉 Spring 这个方法是一个异步方法,Spring 会将这个方法的执行放在异步线程中进行。使用 @Async 注解需要满足以下条件: 需要在 Spring Boot
    的头像 发表于 09-30 10:32 1441次阅读

    Spring Boot Starter需要些什么

    pulsar-spring-boot-starter是非常有必要的,在此之前,我们先看看一个starter需要些什么。 Spring Boot Starter spring-boot
    的头像 发表于 09-25 11:35 765次阅读
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> Starter需要些什么

    Spring boot中Redis的使用

    【本人秃顶程序员】springboot专辑:Spring boot中Redis的使用
    发表于 03-27 11:42

    Spring Boot嵌入式Web容器原理是什么

    Spring Boot嵌入式Web容器原理Spring Boot的目标是构建“非常容易创建、独立、产品级别的基于Spring的应用”。这些应
    发表于 12-16 07:57

    Spring Boot框架错误处理

    》 《strong》翻译《/strong》:雁惊寒《/p》 《/blockquote》《p》《em》摘要:本文通过实例介绍了使用Spring Boot在设计API的时候如何正确地对异常进行处理。以下是译文《/em》《/p》《p》API在提供错误消息的同时进行适当的错误处理
    发表于 09-28 15:31 0次下载

    Spring Boot从零入门1 详述

    在开始学习Spring Boot之前,我之前从未接触过Spring相关的项目,Java基础还是几年前自学的,现在估计也忘得差不多了吧,写Spring
    的头像 发表于 12-10 22:18 639次阅读

    Spring Boot特有的实践

    Spring Boot是最流行的用于开发微服务的Java框架。在本文中,我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践。这些内容是基于我的个人经验
    的头像 发表于 09-29 10:24 913次阅读

    强大的Spring Boot 3.0要来了

    ://spring.io/blog/2022/10/20/spring-boot-3-0-0-rc1-available-now** 发布公告写道,此版本包含 135 项功能增强、文档改进、依赖升级
    的头像 发表于 10-31 11:17 1876次阅读

    怎样使用Kiuwan保护Spring Boot应用程序呢?

    Spring Boot 提供了快速轻松地构建基于Spring 的应用程序所需的工具功能和依赖项。
    的头像 发表于 03-16 09:10 793次阅读

    Spring Boot Web相关的基础知识

    上一篇文章我们已经学会了如何通过IDEA快速建立一个Spring Boot项目,还介绍了Spring Boot项目的结构,介绍了项目配置文件pom.xml的组成部分,并且撰写了我们
    的头像 发表于 03-17 15:03 660次阅读

    Spring Boot中如何使用定时任务

    本文介绍在 Spring Boot 中如何使用定时任务,使用非常简单,就不做过多说明了。
    的头像 发表于 04-12 10:56 975次阅读

    Spring Boot Actuator快速入门

    一下 Spring Boot Actuator ,学习如何在 Spring Boot 2.x 中使用、配置和扩展这个监控工具
    的头像 发表于 10-09 17:11 639次阅读

    Spring Boot启动 Eureka流程

    (String[] args) { SpringApplication .run (EurekaServer.class, args); }} 上面的代码是最最平常的 Spring Boot 启动
    的头像 发表于 10-10 11:40 894次阅读
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>启动 Eureka流程

    Spring Boot的启动原理

    可能很多初学者会比较困惑,Spring Boot 是如何做到将应用代码和所有的依赖打包成一个独立的 Jar 包,因为传统的 Java 项目打包成 Jar 包之后,需要通过 -classpath 属性
    的头像 发表于 10-13 11:44 652次阅读
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>的启动原理

    Spring Boot 的设计目标

    什么是Spring Boot Spring BootSpring 开源组织下的一个子项目,也是 S
    的头像 发表于 10-13 14:56 588次阅读
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的设计目标