当前位置: 首页 > 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.dtcms.com/a/285519.html

相关文章:

  • 抗辐照与国产替代:ASM1042在卫星光纤放大器(EDFA)中的应用探索
  • 相机长焦个短焦
  • gin数据解析和绑定
  • CentOS 7 配置环境变量常见的4种方式
  • 【Python】DRF核心组件详解:Mixin与Generic视图
  • (5)颜色的灰度,亮度,对比度,透明度,都啥意思
  • IDEA 2024.1 配置 MyBatis Generator 详细教程
  • PostgreSQL技术大讲堂 - 第97讲:PG数据库编码和区域(locale)答疑解惑
  • SQLite / LiteDB 单文件数据库为何“清空表后仍占几 GB”?——原理解析与空间回收实战
  • 基于单片机智能浇花控制系统设计
  • 短视频矩阵系统:选择与开发的全面指南
  • Instagram千号矩阵:亚矩阵云手机破解设备指纹检测的终极方案
  • Hadoop与云原生集成:弹性扩缩容与OSS存储分离架构深度解析
  • ThreadLocal 在 Spring 与数据库交互中的应用笔记
  • 车载监控录像系统:智能安全驾驶的守护者
  • SGLang 推理框架核心组件解析:请求、内存与缓存的协同工作
  • Android音视频探索之旅 | Webrtc 1对1音视频通话核心流程分析
  • Go语言实战案例-斐波那契数列生成器
  • 分表聚合助手类
  • UniApp TabBar 用户头像方案:绕过原生限制的实践
  • 依托CCLinkIE转ModbusTCP网关的转换达成西门子PLC连接配置案例
  • 涉及海量数据的查询SQL建议使用“数据库函数”封装并调用
  • Rust实战:高效对接Postman API
  • 【Nginx】nginx+lua+redis实现限流
  • 【Lua】闭包可能会导致的变量问题
  • 去中心化交易所(DEX)深度解析:解码行业头部项目
  • 双向广搜算法详解
  • 【现有资料整理】灵枢 - 用于医学领域的 SOTA 多模态大语言模型
  • 对Yii2中开启`authenticator`后出现的跨域问题-修复
  • .QOI: Lossless Image Compression in O(n) Time