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.pswp.cn/diannao/91646.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91646.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/91646.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络、CentOS 系统、数据库面试知识点总结

文章目录Linux CentOS 面试知识点整理速查复习✅ 一、Linux 高频面试题✅ 二、MySQL 高频面试题✅ 三、计算机网络(OSI四层模型)高频面试题🔗 链路层(Link Layer)🌐 网络层(Internet Layer&…

Vue (Official) v3.0.2 新特性 为非类npm环境引入 globalTypesPath 选项

目录 前言 报错信息 原因 解决方案 总结 前言 在早上更新了vscode后,发现自己 uni-app 项目的 .vue文件 的 template 标签都出现了报错。定位到了问题是因为 Vue (Official) 插件更新导致的,重装了插件的上一个小版本,报错消失&#xff…

程序可能的输出

#include "csapp.h"int main() {int x 3;if (Fork() ! 0)printf("x%d\n", x);printf("x%d\n", --x);exit(0); }分析:父进程先执行printf("x%d\n", x); 输出x4。后执行 printf("x%d\n", --x);输出x3。子进程只执…

2025年UDP应用抗洪指南:从T级清洗到AI免疫,实战防御UDP洪水攻击

一次未防护的UDP暴露,可能让日活百万的应用瞬间瘫痪,损失超千万2025年,随着物联网僵尸网络规模指数级增长及AI驱动的自适应攻击工具泛滥,UDP洪水攻击峰值已突破8Tbps,单次攻击成本却降至50元以下。更致命的是&#xff…

centos7安装MySQL8.4手册

目录前言一、首先更新插件,并查看当前系统版本二、安装步骤1、创建mysql目录2、安装rpm包3、安装 mysql-community-server4、启动MySQL服务5、查看MySQL状态6、设置开机自启动三、查看默认密码四、登录mysql五、修改密码六、开启远程访问1. 修改 MySQL 配置文件2. 重…

人脸检测算法——SCRFD

SCRFD算法核心解析 1. 算法定义与背景 SCRFD(Sample and Computation Redistribution for Efficient Face Detection)由Jia Guo等人于2021年在arXiv提出,是一种高效、高精度的人脸检测算法,其核心创新在于: 双重重分…

vue3+ts+elementui-表格根据相同值合并

代码<div style"height: auto; overflow: auto"><el-table ref"dataTableRef" v-loading"loading" :data"pageData" highlight-current-row borderselection-change"handleSelectionChange" :span-method"obj…

UI前端与数字孪生融合案例:智慧城市的智慧停车引导系统

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩!一、引言&#xff1a;停车难的 “城市痛点” 与数字孪生的破局之道当司机在商圈绕圈 30 分钟仍…

java+vue+SpringBoot集团门户网站(程序+数据库+报告+部署教程+答辩指导)

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿ppt部署教程代码讲解代码时间修改工具 技术实现 开发语言&#xff1a;后端&#xff1a;Java 前端&#xff1a;vue框架&#xff1a;springboot数据库&#xff1a;mysql 开发工具 JDK版本&#xff1a;JDK1.8 数…

【Docker基础】Docker-compose从入门到精通:安装指南与核心命令全解析

目录 前言 1 Docker-compose核心概念解析 1.1 什么是Docker-compose&#xff1f; 1.2 典型应用场景 2 Docker-compose离线安装详解 2.1 离线安装背景与优势 2.2 详细安装步骤 步骤1&#xff1a;获取离线安装包 步骤2&#xff1a;文件部署与权限设置 步骤3&#xff1a…

面试150 被围绕的区域

思路 使用DFS&#xff0c;将所有与边界相连的’O’都修改为‘#’,然后遍历数组&#xff0c;如果是遇到’#‘修改为’O’,如果是’O’修改为’X’。 class Solution:def solve(self, board: List[List[str]]) -> None:"""Do not return anything, modify boar…

(数据结构)线性表(上):SeqList 顺序表

线性表&#xff08;上&#xff09;&#xff1a;Seqlist 顺序表基本了解线性表顺序表静态顺序表动态顺序表编写动态顺序表项目结构基础结构初始化尾插头插尾删头删查找指定位置pos之前插入数据删除指定位置pos的数据销毁完整代码SeqLIst.hSeqLIst.ctest.c算法题移除元素删除有序…

WebStorm vs VSCode:前端圈的「豆腐脑甜咸之争」

目录 一、初识两位主角&#xff1a;老司机与新势力 二、开箱体验&#xff1a;是「拎包入住」还是「毛坯房改造」 三、智能提示&#xff1a;是「知心秘书」还是「百度搜索」 四、调试功能&#xff1a;是「CT 扫描仪」还是「听诊器」 五、性能表现&#xff1a;是「重型坦克」…

C#将类属性保存到Ini文件方法(利用拓展方法,反射方式获取到分组名和属性名称属性值)

前言&#xff1a;最近学习C#高级课程&#xff0c;里面学到了利用反射和可以得到属性的特性、属性名、属性值&#xff0c;还有拓展方法&#xff0c;一直想将学到的东西利用起来&#xff0c;刚好今天在研究PropertyGrid控件时&#xff0c;想方便一点保存属性值到配置文件&#xf…

kafka 单机部署指南(KRaft 版本)

目录环境准备JDK安装下载jdkjdk安装kafka 部署kafka 下载kafka 版本号结构解析kafka 安装下载和解压安装包配置 KRaft 模式格式化存储目录启动kafkaKafka 配置为 systemd 服务注意事项调整 JVM 内存参数Kafka KRaft 版本&#xff08;即 Kafka 3.0 及更高版本&#xff09;使用 K…

websocket案例 599足球比分

目标地址:aHR0cHM6Ly93d3cuNTk5LmNvbS9saXZlLw接口:打开控制台 点websocket 刷新页面 显示分析:不写理论了关于websocket 几乎发包位置都是下方图片 不管抖音还是快手 等平台这里在进行 new WebSocket 后 是要必须走一步的 也就是 new WebSocket().onopen() 也就是onopen 进行向…

【后端】Linux系统发布.NetCore项目

目录 1.设置全球化不变模式 1.发布到文件 3. 配置为服务 3.1.添加服务 3.2.添加执行权限 3.3.启动服务 4.访问 1.设置全球化不变模式 双击所需项目&#xff0c;设置全球化不变模式 <!-- 设置全球化不变模式 --><RuntimeHostConfigurationOption>System.Globa…

CMU-15445(2024fall)——PROJECT#0

题目介绍 这是题目原文。 注意&#xff1a;在拉取项目的时候需要注意拉取2024fall的Tag&#xff0c;本人血泪教训&#xff01; 本题是关于HyperLogLog的具体实现&#xff0c;其介绍可以看这个视频进行了解。简单来说HyperLogLog可以在一个非常小的固定内存下&#xff08;一般…

使用微信免费的图像处理接口,来开发图片智能裁剪和二维码/条码识别功能,爽歪歪

大家好&#xff0c;我是小悟。 1、图片智能裁剪 我们先来了解一下图片智能裁剪。图片智能裁剪聚焦于数字图像的智能化处理。AI技术的引入彻底改变了传统依赖人工框选的裁剪模式。 通过深度学习模型自动识别图像主体&#xff08;人物、商品等&#xff09;&#xff0c;能在极短时…

【代码随想录】+ leetcode hot100:栈与队列算法专题总结、单调栈

大家好&#xff0c;我是此林。 今天分享的是【代码随想录】栈与队列算法专题总结&#xff0c;分享刷算法的心得体会。 1. 用栈实现队列、用队列实现栈 232. 用栈实现队列 - 力扣&#xff08;LeetCode&#xff09; 225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09;…