当前位置: 首页 > news >正文

小架构step系列18:工具

1 概述

在写代码的时候,有很多通用的、与业务无关逻辑,这些一般写成工具类方法。这些工具类方法慢慢地被积累起来,变成了开源包,可以直接使用开源包,而不是自己再花时间来重复造这些轮子。

这些工具类的开源包比较多,公司如果没有控制的话,不同的开发人员就会选自己熟悉的开源包,甚至都拿来练练手。这样的后果就是,在一个工程内使用了五花八门的工具类包,维护代码的时候不好维护,如果要升级一些框架包或者扫描漏洞,发现很多包都需要升级或者更改,处理起来工作量比较大。

故对于公司来说,应该限定一下工具类包的种类,选定符合公司情况的工具类包。

2 工具类包

2.1 常用的工具类包

包名

说明

Apache Commons

集合操作、字符串操作、日期处理、文件处理、编码和解码、各种验证器等操作,种类是比较丰富的,需要什么类型的操作就引对应的依赖包。参考文档:https://commons.apache.org/

Spring和JDK提供的Util类

零零散散有一些(比如字符串、文件等操作),好处是不用额外引包,缺点是场景有限,比较零散也不好找。

Google Guava

有字符串操作、集合操作、对象比较、数学计算、反射等基础操作,还提供了图、缓存、并发、函数等有特色的工具方法,有对特色部分有需求的可优先选用。参考文档:https://github.com/google/guava/wiki

Hutool

小而全,覆盖大部分场景,没有依赖其它开源包,非常的轻量,也很好用,缺点是没有社区的维护,有停止维护的风险。参考文档:https://doc.hutool.cn/pages/index/

本文选Hutool来说明,该工具属于个人维护的,并没有大公司背后支持,根据公司情况选用。

2.2 Hutool常用工具类

下面只是摘录一些常用的接口,Hutool提供了很丰富的工具类方法,更多方法可参考文档说明:https://doc.hutool.cn/pages/index/

2.2.1 对象操作

cn.hutool.core.bean.BeanUtil

把对象转为Map:Map beanToMap(Object bean)

拷贝对象属性:void copyProperties(Object source, Object target, boolean ignoreCase)

获取指定属性值:Object getFieldValue(Object bean, String fieldNameOrIndex)

把map转成对象:T mapToBean(Map map, Class beanClass, boolean isIgnoreError)

把对象拷贝成指定类型对象:T toBean(Object source, Class clazz)

2.2.3 数组操作

cn.hutool.core.util.ArrayUtil

判断数组是否为空:boolean isEmpty(Object array)

给数组增加元素:Object append(Object array, T... newElements)

拷贝数组部分元素:Object copy(Object src, int srcPos, Object dest, int destPos, int length)

获取数组长度:int length(Object array)

把集合转为数组:T[] toArray(Collection collection, Class componentType)

2.2.4 集合操作

cn.hutool.core.collection.CollectionUtil

判断是否包含元素:boolean contains(Collection collection, Object value)

创建空集合:T empty(Class collectionClass)

判断集合是否为空:boolean isEmpty(Collection collection)

对集合元素进行排序:List sort(Collection collection, Comparator comparator)

数组转集合:ArrayList toList(T... values)

2.2.5 字符串操作

cn.hutool.core.util.StrUtil

判断字符串是否为空:boolean isEmpty(CharSequence str)

判断字符串是否包含子串:boolean contains(CharSequence str, CharSequence searchStr)

trim字符串:String trim(CharSequence str)

拆分字符串:String[] split(CharSequence str, CharSequence separator)

拆分并trim字符串:List splitTrim(CharSequence str, CharSequence separator)

把字符串转成驼峰型:String toCamelCase(CharSequence name)

2.2.6 日期操作

cn.hutool.core.date.DateUtil

格式化字符串:String format(Date date, String format)

把字符串解析为日期对象:DateTime parse(CharSequence dateStr, String format)

取指定日期的月:int month(Date date) 同理可以取时分秒、年月日、周等

取指定日期同月的第一天:DateTime beginOfMonth(Date date)

取指定日期同月的最后一天:DateTime endOfMonth(Date date)

取两个日期之间的差值:long between(Date beginDate, Date endDate, DateUnit unit)

判断是否闰年:boolean isLeapYear(int year)

变更日期:DateTime offset(Date date, DateField dateField, int offset)

2.2.7 文件操作

cn.hutool.core.io.FileUtil

创建文件:File newFile(String path)

拷贝文件:File copy(File src, File dest, boolean isOverride)

移动文件:void move(File src, File dest, boolean isOverride)

列出目录下的文件:File[] ls(String path)

判断是否是文件:boolean isFile(File file)

读文本文件行为List:List readLines(File file, Charset charset)

写文本文件:File writeLines(Collection list, File file, Charset charset)

获取文件大小:long size(File file)

判断是否是目录:boolean isDirectory(File file)

创建目录:File mkdir(File dir)

创建父目录:File mkParentDirs(File file)

2.2.8 HTTP操作

cn.hutool.http.HttpUtil

发GET请求: String get(String urlString, Map paramMap)

发POST请求:String post(String urlString, Map paramMap)

下载文件:long downloadFile(String url, File destFile)

cn.hutool.json.JSONUtil

格式化JSON字符串:String formatJsonStr(String jsonStr)

把JSON字符串转成对象:T toBean(String jsonString, Class beanClass)

把JSON字符串转成List:List toList(String jsonArray, Class elementType)

把对象转为JSON字符串:String toJsonStr(Object obj)

2.2.9 加解密操作

cn.hutool.crypto.SecureUtil

散列成MD5字符串:String md5(String data)

散列成SHA1字符串:String sha1(String data)

散列成SHA256字符串:String sha256(String data)

AES加密:AES aes(byte[] key)

RSA加密:RSA rsa(String privateKeyBase64, String publicKeyBase64)

对参数签名:String signParamsSha256(Map params, String... otherParams)

注:感觉这块封装得不够完善,可以当基础方法进一步封装。

3 架构一小步

1、确定工具类,如Hutool、guava。

2、积累公司自身的工具类包(涵盖外部工具类不涉及的部分或者扩展的部分)。

3、应定期调研工具类包和收集工具类包的需求,根据需要扩展。

4、规范:只允许使用的工具类包,不要随意引入新的工具类包。

http://www.lryc.cn/news/592085.html

相关文章:

  • web3 区块链技术与用
  • 6 种无线传输照片从安卓到 Mac 的方法
  • 在ComfyUI中CLIP Text Encode (Prompt)和CLIPTextEncodeFlux的区别
  • 5 种可行的方法:如何将 Redmi 联系人备份到 Mac
  • AI进入自动驾驶时代:OpenAI发布革命性ChatGPT Agent
  • 飞牛上使用Docker方式部署LibreTV,再配合内网穿透,实现免费无广告刷剧的服务教程
  • 深度剖析:最新发布的ChatGPT Agent 技术架构与应用场景
  • uniapp+vue2——自定义底部导航tabbar
  • android版本编译问题之Hvac 应用体积优化问题处理记录
  • 从一开始的网络攻防(四):XSS
  • 推荐算法召回:架构理解
  • 正则表达式,Collection集合,迭代器
  • 正则表达式完全指南:从入门到实战
  • Kotlin集合分组
  • 黑马Node.js全套入门教程,nodejs新教程含es6模块化+npm+express+webpack+promise等_ts对象笔记
  • Kotlin集合过滤
  • 【Python】LEGB作用域 + re模块 + 正则表达式
  • uni-app 跳转页面传参
  • SpringCloud相关总结
  • 牛油果果实检测-目标检测数据集(真实环境下)
  • 基于SpringBoot 投票系统 【源码+LW+PPT+部署】
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 基于jieba实现词频统计
  • 在 React 中根据数值动态设置 SVG 线条粗细
  • Hadoop与云原生集成:弹性扩缩容与OSS存储分离架构深度解析
  • VSCode - VSCode 快速跳转标签页
  • 135. Java 泛型 - 无界通配符
  • Android CountDownTimer
  • Ubuntu系统下交叉编译Android的X265库
  • UVC for USBCamera in Android - 篇二
  • 股指期货的杠杆比例一般是多少?