接以前的文章 apache-commons 常用工具类 和文章 apache-commons 工具类扩展
小家 Spring 对 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);
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
可以用来比较两个媒体类型和一个是否是另一个的子类等功能
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 来获取编码后的内容。
它组合了 AntPathMatcher
路径匹配和 Resource
功能,将查找到的路径转换成 Resource 列表返回
org.springframework.util.MethodInvoker
把类,方法,参数列表,参数值打包起来,组成一个执行器,在写底层反射时可能能用到
以前我们在父类需要获取子类的具体泛型类型时,需要通过 ParameterizedType
获取方法的返回值的参数化类型用: method.getGenericReturnType
获取字段的参数化类型用: field.getGenericType()
获取方法参数的参数化类型用: method.getGenericParameterTypes()
简单解释下参数化类型 ParameterizedType
:java 中所有的类型都有一个超类 Type
,参数化类型是它的一种,表示有泛型的类型,像 List<E>
ParameterizedType
的方法 getActualTypeArguments
用于获取泛型的类型列表,就是<> 中的内容,像 Map<K,V> 是有多个泛型参数的;
方法 getRawType
用于获取类型,就是 <> 前面表示的类型;
方法 getOwnerType
用于处理有内部类的情况,返回其包含类,如果没有则为空。
GenericTypeResolver
用于处理方法返回值,方法参数,字段,的泛型解析。
不区分 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