接以前的文章 apache-commons 常用工具類 和文章 apache-commons 工具類擴展
小家 Spring 對 spring 的工具類做了詳細的介紹(一) 這里我抽出一些好用的類,不是那種靜態方法的類還有一些擴充來組成這篇博文
路徑匹配
org.springframework.util.AntPathMatcher
它可以幫助我們做一些路徑的匹配,可以用於路徑映射規則匹配 。? (任何單字符) * (任意數量字符) **(任意目錄或文件)
占位符解析
org.springframework.util.PropertyPlaceholderHelper
jdk 的類庫中有一些用於字符串點位符的解析 ,像 String.format ,MessageFormat
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/json ,multipart/form-data,application/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 可以解決這一問題,常用的有
UrlResource,FileUrlResource,InputStreamResource,ClassPathResource
對於 ClassPathResource和 UrlResource 來說,有一個工具類可以直接獲取到對應的資源 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
