spring 工具類大集合

接之前的文章 apache-commons 經常使用工具類 和文章 apache-commons 工具類擴展java

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

小家 Spring 工具類 (二)spring

路徑匹配

org.springframework.util.AntPathMatcher數據庫

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

佔位符解析

org.springframework.util.PropertyPlaceholderHelperjson

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

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

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

但有時候咱們更但願咱們的點位符名稱能夠自定義,和 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

相關文章
相關標籤/搜索