spring 工具類大集合


接以前的文章 apache-commons 常用工具類 和文章 apache-commons 工具類擴展

小家 Spring 對 spring 的工具類做了詳細的介紹(一) 這里我抽出一些好用的類,不是那種靜態方法的類還有一些擴充來組成這篇博文

小家 Spring 工具類 (二)

路徑匹配

org.springframework.util.AntPathMatcher

它可以幫助我們做一些路徑的匹配,可以用於路徑映射規則匹配 。? (任何單字符) * (任意數量字符) **(任意目錄或文件)

占位符解析

org.springframework.util.PropertyPlaceholderHelper

jdk 的類庫中有一些用於字符串點位符的解析 ,像 String.formatMessageFormat

String.format 只能順序來解析類似像 C 語言那樣的點位符,像 \d,\s 之類的。

MessageFormat 支持像 {0} ,{1} 這樣的點位符。

但有時候我們更希望我們的點位符名稱可以自定義,和 spring 的占位符一樣的使用,則可以使用類

org.springframework.util.PropertyPlaceholderHelper,你可以自定義占位符前綴后綴 ${ }

方法參數名解析

org.springframework.core.ParameterNameDiscoverer

這個是我在我的框架中使用過的解析參數名稱,將一個參數的方法名稱解析出來,雖然 java8 已經支持參數名稱,但還是要在啟動時加一個參數才行,但這個工具不需要

ParameterNameDiscoverer parameterNameDiscoverer = new LocalVariableTableParameterNameDiscoverer();
String[] parameterNames = parameterNameDiscoverer.getParameterNames(method);

媒體參數(MimeType)

org.springframework.util.MimeType

應該很多人被 http 的 contentType 搞暈過,常見的 application/jsonmultipart/form-dataapplication/x-www-form-urlencoded ,有時候還會加上字符集 application/json charset=utf-8,其實這些上 postman 可以看得非常清楚。

另外在 spring 中也有專門針對這個的一個類 MimeType 和對應的一個工具類 MimeTypeUtils,你可以使用它的一些常用 mime ,並且可以通過解析字符串來創建 MimeType

MimeType 可以用來比較兩個媒體類型和一個是否是另一個的子類等功能

資源處理(Resource)

org.springframework.core.io.InputStreamSource

spring 把文件資源,上傳的文件(MultipartFile),網絡資源,jar 包資源,都抽象成可以獲取輸入流的資源。

以前我都是用 InputStream 來傳參會覺得很方便,不喜歡使用 File 傳參或 path 傳參,但 InputStream 來當做參數有一個不好的地方,就是流被讀過一次,就無法再讀取了,而使用者又不知道從哪去打開同樣的流,用 spring 的 Resource 可以解決這一問題,常用的有

UrlResourceFileUrlResourceInputStreamResourceClassPathResource

對於 ClassPathResourceUrlResource 來說,有一個工具類可以直接獲取到對應的資源 URL 和 File ,ResourceUtils

對於像文本文件需要編碼的文件,需要將 Resource 做進一步包裝 EncodedResource,獲取它的 Reader 來獲取編碼后的內容。

資源查找(PathMatchingResourcePatternResolver)

它組合了 AntPathMatcher 路徑匹配和 Resource 功能,將查找到的路徑轉換成 Resource 列表返回

方法調用器 (MethodInvoker)

org.springframework.util.MethodInvoker

把類,方法,參數列表,參數值打包起來,組成一個執行器,在寫底層反射時可能能用到

泛型解析(GenericTypeResolver)

以前我們在父類需要獲取子類的具體泛型類型時,需要通過 ParameterizedType

獲取方法的返回值的參數化類型用: method.getGenericReturnType

獲取字段的參數化類型用:field.getGenericType()

獲取方法參數的參數化類型用: method.getGenericParameterTypes()

簡單解釋下參數化類型 ParameterizedType :java 中所有的類型都有一個超類 Type ,參數化類型是它的一種,表示有泛型的類型,像 List<E>

ParameterizedType 的方法 getActualTypeArguments 用於獲取泛型的類型列表,就是<> 中的內容,像 Map<K,V> 是有多個泛型參數的;

方法 getRawType 用於獲取類型,就是 <> 前面表示的類型;

方法 getOwnerType 用於處理有內部類的情況,返回其包含類,如果沒有則為空。

GenericTypeResolver 用於處理方法返回值,方法參數,字段,的泛型解析。

一些增強的 map

不區分 key 的大小寫的 map LinkedCaseInsensitiveMap

一鍵多值的 map LinkedMultiValueMap

另外 apache collections 提供了一個可以根據值反向查 key 的 map BidiMap ,這里補充一下

BidiMap<String, String> capitalCountryMap = new DualHashBidiMap<>();
capitalCountryMap.put("Berlin", "Germany");
capitalCountryMap.put("Cape Town", "South Africa");
String capitalOfGermany = capitalCountryMap.getKey("Germany");

增強性能的工具

FastByteArrayOutputStream 增強了 ByteArrayOutputStream

AlternativeJdkIdGenerator 代替 jdk 的 UUID 生成器

一點小推廣

創作不易,希望可以支持下我的開源軟件,及我的小工具,歡迎來 gitee 點星,fork ,提 bug 。

Excel 通用導入導出,支持 Excel 公式
博客地址:https://blog.csdn.net/sanri1993/article/details/100601578
gitee:https://gitee.com/sanri/sanri-excel-poi

使用模板代碼 ,從數據庫生成代碼 ,及一些項目中經常可以用到的小工具
博客地址:https://blog.csdn.net/sanri1993/article/details/98664034
gitee:https://gitee.com/sanri/sanri-tools-maven


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM