0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Spring Boot 內(nèi)置工具類功能

Android編程精選 ? 來源:Android編程精選 ? 作者:Android編程精選 ? 2022-10-24 14:57 ? 次閱讀

斷言

對象、數(shù)組、集合

ObjectUtils

StringUtils

CollectionUtil

文件、資源、IO 流

FileCopyUtils

ResourceUtils

StreamUtils

反射、AOP

ReflectionUtils

AopUtils

AopContext

最近發(fā)現(xiàn)同事寫了不少重復的工具類,發(fā)現(xiàn)其中很多功能,Spring 自帶的都有。于是整理了本文,希望能夠幫助到大家!

斷言

斷言是一個邏輯判斷,用于檢查不應該發(fā)生的情況

Assert 關鍵字在 JDK1.4 中引入,可通過 JVM 參數(shù)-enableassertions開啟

SpringBoot 中提供了 Assert 斷言工具類,通常用于數(shù)據(jù)合法性檢查

//要求參數(shù)object必須為非空(NotNull),否則拋出異常,不予放行
//參數(shù) message 參數(shù)用于定制異常信息。
voidnotNull(Objectobject,Stringmessage)
//要求參數(shù)必須空(Null),否則拋出異常,不予『放行』。
//和notNull()方法斷言規(guī)則相反
voidisNull(Objectobject,Stringmessage)
//要求參數(shù)必須為真(True),否則拋出異常,不予『放行』。
voidisTrue(booleanexpression,Stringmessage)
//要求參數(shù)(List/Set)必須非空(NotEmpty),否則拋出異常,不予放行
voidnotEmpty(Collectioncollection,Stringmessage)
//要求參數(shù)(String)必須有長度(即,NotEmpty),否則拋出異常,不予放行
voidhasLength(Stringtext,Stringmessage)
//要求參數(shù)(String)必須有內(nèi)容(即,NotBlank),否則拋出異常,不予放行
voidhasText(Stringtext,Stringmessage)
//要求參數(shù)是指定類型的實例,否則拋出異常,不予放行
voidisInstanceOf(Classtype,Objectobj,Stringmessage)
//要求參數(shù)`subType`必須是參數(shù)superType的子類或實現(xiàn)類,否則拋出異常,不予放行
voidisAssignable(ClasssuperType,ClasssubType,Stringmessage)

對象、數(shù)組、集合

ObjectUtils

獲取對象的基本信息

//獲取對象的類名。參數(shù)為 null 時,返回字符串:"null"
StringnullSafeClassName(Objectobj)
//參數(shù)為null時,返回0
intnullSafeHashCode(Objectobject)
//參數(shù)為 null 時,返回字符串:"null"
StringnullSafeToString(boolean[]array)
//獲取對象 HashCode(十六進制形式字符串)。參數(shù)為 null 時,返回0
StringgetIdentityHexString(Objectobj)
//獲取對象的類名和 HashCode。參數(shù)為 null 時,返回字符串:""
StringidentityToString(Objectobj)
//相當于 toString()方法,但參數(shù)為 null 時,返回字符串:""
StringgetDisplayString(Objectobj)

判斷工具

//判斷數(shù)組是否為空
booleanisEmpty(Object[]array)
//判斷參數(shù)對象是否是數(shù)組
booleanisArray(Objectobj)
//判斷數(shù)組中是否包含指定元素
booleancontainsElement(Object[]array,Objectelement)
//相等,或同為null時,返回true
booleannullSafeEquals(Objecto1,Objecto2)
/*
判斷參數(shù)對象是否為空,判斷標準為:
Optional:Optional.empty()
Array:length==0
CharSequence:length==0
Collection:Collection.isEmpty()
Map:Map.isEmpty()
*/
booleanisEmpty(Objectobj)

其他工具方法

//向參數(shù)數(shù)組的末尾追加新元素,并返回一個新數(shù)組
A[]addObjectToArray(A[]array,Oobj)
//原生基礎類型數(shù)組-->包裝類數(shù)組
Object[]toObjectArray(Objectsource)

StringUtils

字符串判斷工具

//判斷字符串是否為null,或""。注意,包含空白符的字符串為非空
booleanisEmpty(Objectstr)
//判斷字符串是否是以指定內(nèi)容結束。忽略大小寫
booleanendsWithIgnoreCase(Stringstr,Stringsuffix)
//判斷字符串是否已指定內(nèi)容開頭。忽略大小寫
booleanstartsWithIgnoreCase(Stringstr,Stringprefix)
//是否包含空白符
booleancontainsWhitespace(Stringstr)
//判斷字符串非空且長度不為0,即,NotEmpty
booleanhasLength(CharSequencestr)
//判斷字符串是否包含實際內(nèi)容,即非僅包含空白符,也就是NotBlank
booleanhasText(CharSequencestr)
//判斷字符串指定索引處是否包含一個子串。
booleansubstringMatch(CharSequencestr,intindex,CharSequencesubstring)
//計算一個字符串中指定子串的出現(xiàn)次數(shù)
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)
//對數(shù)組的每一項執(zhí)行trim()方法
String[]trimArrayElements(String[]array)
//將URL字符串進行解碼
StringuriDecode(Stringsource,Charsetcharset)

路徑相關工具方法

//解析路徑字符串,優(yōu)化其中的“..”
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)
//返回參數(shù)candidates中第一個存在于參數(shù)source中的元素
EfindFirstMatch(Collectionsource,Collectioncandidates)
//返回 List/Set 中指定類型的元素。
TfindValueOfType(Collectioncollection,Classtype)
//返回 List/Set 中指定類型的元素。如果第一種類型未找到,則查找第二種類型,以此類推
ObjectfindValueOfType(Collectioncollection,Class[]types)
//返回List/Set中元素的類型
ClassfindCommonElementType(Collectiocollection)

文件、資源、IO 流

FileCopyUtils

輸入

//從文件中讀入到字節(jié)數(shù)組中
byte[]copyToByteArray(Filein)
//從輸入流中讀入到字節(jié)數(shù)組中
byte[]copyToByteArray(InputStreamin)
//從輸入流中讀入到字符串中
StringcopyToString(Readerin)

輸出

//從字節(jié)數(shù)組到文件
voidcopy(byte[]in,Fileout)
//從文件到文件
intcopy(Filein,Fileout)
//從字節(jié)數(shù)組到輸出流
voidcopy(byte[]in,OutputStreamout)
//從輸入流到輸出流
intcopy(InputStreamin,OutputStreamout)
//從輸入流到輸出流
intcopy(Readerin,Writerout)
//從字符串到輸出流
voidcopy(Stringin,Writerout)

ResourceUtils

從資源路徑獲取文件

//判斷字符串是否是一個合法的 URL 字符串。
staticbooleanisUrl(StringresourceLocation)
//獲取URL
staticURLgetURL(StringresourceLocation)
//獲取文件(在JAR包內(nèi)無法正常使用,需要是一個獨立的文件)
staticFilegetFile(StringresourceLocation)

Resource

//文件系統(tǒng)資源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)
//舍棄輸入流中的內(nèi)容
intdrain(InputStreamin)

反射、AOP

ReflectionUtils

獲取方法

//在類中查找指定方法
MethodfindMethod(Classclazz,Stringname)
//同上,額外提供方法參數(shù)類型作查找條件
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)

執(zhí)行方法

//執(zhí)行方法
ObjectinvokeMethod(Methodmethod,Objecttarget)
//同上,提供方法參數(shù)
ObjectinvokeMethod(Methodmethod,Objecttarget,Object...args)
//取消 Java 權限檢查。以便后續(xù)執(zhí)行該私有方法
voidmakeAccessible(Methodmethod)
//取消 Java 權限檢查。以便后續(xù)執(zhí)行私有構造方法
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 的權限控制檢查。以便后續(xù)讀寫該私有屬性
voidmakeAccessible(Fieldfield)
//對類的每個屬性執(zhí)行callback
voiddoWithFields(Classclazz,ReflectionUtils.FieldCallbackfc)
//同上,多了個屬性過濾功能。
voiddoWithFields(Classclazz,ReflectionUtils.FieldCallbackfc,
ReflectionUtils.FieldFilterff)
//同上,但不包括繼承而來的屬性
voiddoWithLocalFields(Classclazz,ReflectionUtils.FieldCallbackfc)

AopUtils

判斷代理類型

//判斷是不是Spring代理對象
booleanisAopProxy()
//判斷是不是jdk動態(tài)代理對象
isJdkDynamicProxy()
//判斷是不是CGLIB代理對象
booleanisCglibProxy()

獲取被代理對象的 class

//獲取被代理的目標class
ClassgetTargetClass()

AopContext

獲取當前對象的代理對象

ObjectcurrentProxy()




審核編輯:彭靜

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)

    關注

    8

    文章

    6715

    瀏覽量

    88308
  • spring
    +關注

    關注

    0

    文章

    335

    瀏覽量

    14259

原文標題:別再自己瞎寫工具類了,Spring Boot 內(nèi)置工具類應有盡有, 建議收藏?。?/p>

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Spring Boot如何實現(xiàn)異步任務

    ,用來告訴 Spring 這個方法是一個異步方法,Spring 會將這個方法的執(zhí)行放在異步線程中進行。使用 @Async 注解需要滿足以下條件: 需要在 Spring Boot
    的頭像 發(fā)表于 09-30 10:32 ?1135次閱讀

    Spring Boot Starter需要些什么

    pulsar-spring-boot-starter是非常有必要的,在此之前,我們先看看一個starter需要些什么。 Spring Boot Starter spring-boot
    的頭像 發(fā)表于 09-25 11:35 ?632次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> Starter需要些什么

    Spring boot中Redis的使用

    【本人禿頂程序員】springboot專輯:Spring boot中Redis的使用
    發(fā)表于 03-27 11:42

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

    Spring Boot嵌入式Web容器原理Spring Boot的目標是構建“非常容易創(chuàng)建、獨立、產(chǎn)品級別的基于Spring的應用”。這些應
    發(fā)表于 12-16 07:57

    Spring Boot框架錯誤處理

    》 《strong》翻譯《/strong》:雁驚寒《/p》 《/blockquote》《p》《em》摘要:本文通過實例介紹了使用Spring Boot在設計API的時候如何正確地對異常進行處理。以下是譯文《/em》《/p》《p》API在提供錯誤消息的同時進行適當?shù)腻e誤處理
    發(fā)表于 09-28 15:31 ?0次下載

    Spring Boot從零入門1 詳述

    在開始學習Spring Boot之前,我之前從未接觸過Spring相關的項目,Java基礎還是幾年前自學的,現(xiàn)在估計也忘得差不多了吧,寫Spring
    的頭像 發(fā)表于 12-10 22:18 ?542次閱讀

    Spring認證」什么是Spring GraphQL?

    這個項目建立在 Boot 2.x 上,但它應該與最新的 Boot2.4.x5 相關。 要創(chuàng)建項目,請轉到start.spring.io并為要使用的GraphQL傳輸選擇啟動器: 啟動機 運輸 執(zhí)行
    的頭像 發(fā)表于 08-10 14:08 ?727次閱讀
    「<b class='flag-5'>Spring</b>認證」什么是<b class='flag-5'>Spring</b> GraphQL?

    Spring Boot特有的實踐

    Spring Boot是最流行的用于開發(fā)微服務的Java框架。在本文中,我將與你分享自2016年以來我在專業(yè)開發(fā)中使用Spring Boot所采用的最佳實踐。這些內(nèi)容是基于我的個人經(jīng)驗
    的頭像 發(fā)表于 09-29 10:24 ?801次閱讀

    強大的Spring Boot 3.0要來了

    ://spring.io/blog/2022/10/20/spring-boot-3-0-0-rc1-available-now** 發(fā)布公告寫道,此版本包含 135 項功能增強、文檔改進、依賴升級
    的頭像 發(fā)表于 10-31 11:17 ?1415次閱讀

    怎樣使用Kiuwan保護Spring Boot應用程序呢?

    Spring Boot 提供了快速輕松地構建基于Spring 的應用程序所需的工具、功能和依賴項。
    的頭像 發(fā)表于 03-16 09:10 ?681次閱讀

    Spring Boot Web相關的基礎知識

    上一篇文章我們已經(jīng)學會了如何通過IDEA快速建立一個Spring Boot項目,還介紹了Spring Boot項目的結構,介紹了項目配置文件pom.xml的組成部分,并且撰寫了我們
    的頭像 發(fā)表于 03-17 15:03 ?562次閱讀

    Spring Boot Actuator快速入門

    一下 Spring Boot Actuator ,學習如何在 Spring Boot 2.x 中使用、配置和擴展這個監(jiān)控工具。
    的頭像 發(fā)表于 10-09 17:11 ?527次閱讀

    Spring Boot啟動 Eureka流程

    (String[] args) { SpringApplication .run (EurekaServer.class, args); }} 上面的代碼是最最平常的 Spring Boot 啟動
    的頭像 發(fā)表于 10-10 11:40 ?707次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>啟動 Eureka流程

    Spring Boot的啟動原理

    可能很多初學者會比較困惑,Spring Boot 是如何做到將應用代碼和所有的依賴打包成一個獨立的 Jar 包,因為傳統(tǒng)的 Java 項目打包成 Jar 包之后,需要通過 -classpath 屬性
    的頭像 發(fā)表于 10-13 11:44 ?541次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>的啟動原理

    Spring Boot 的設計目標

    什么是Spring Boot Spring BootSpring 開源組織下的一個子項目,也是 S
    的頭像 發(fā)表于 10-13 14:56 ?486次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的設計目標