zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    python闭包和装饰器(转)
    python生成器(转)
    python中迭代器(转)
    python中xrange和range(转)
    python函数式编程(转)
    图论
    查找算法
    优先队列和堆排序(转)
    手动爬虫之淘宝笔记本栏(ptyhon3)
    手动爬虫之报头及代理封装类(python3)
  • 原文地址:https://www.cnblogs.com/sanri1993/p/11921711.html
Copyright © 2011-2022 走看看