Hutool
一个封装了很多功能的 Jar ,阿粉要不是因为需求,估计可能很久不都不一定知道他,我们先来看看阿粉的需求是什么样子的。
阿粉之前的需求是让在后端返回一个所谓农历的干支纪年,而这个东西就不是那么容易了呀,要自己去找一些Utils的话,大家可以看一下。
需要我们去专门弄这个么Utils,然后去计算干支纪年,这是不是有点麻烦了,而我们的 Hutool 这个 Jar 就非常的简单了,
ChineseDate chineseDate = new ChineseDate(date); String cyclical = chineseDate.getCyclical();
上面的代码是获取干支纪年,比如他还有获取节日和生效的:
/** * 获得节日 * * @return 获得农历节日 */ public String getFestivals() { return StrUtil.join(",", LunarFestival.getFestivals(this.year, this.month, day)); } /** * 获得年份生肖 * * @return 获得年份生肖 */ public String getChineseZodiac() { return Zodiac.getChineseZodiac(this.year); }
如果你只是认为这个 Jar 只能给你提供这一种帮助那就大错特错了,他内部可是封装了很多很多的方法的。
而且是可以选择引入包,如果你想用 hutool 的所有的 Jar 就可以引入所有的依赖:
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.5.2</version> </dependency>
如果说你只想用其中的某一项功能的时候,那么你就可以挑选其他的 Jar 依赖引入,比如:
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-core</artifactId> <version>5.6.5</version> </dependency>
我们就看看 hutool 都有哪些比较牛掰的 Jar 。
- hutool-aop JDK动态代理封装,提供非IOC下的切面支持
- hutool-bloomFilter 布隆过滤,提供一些Hash算法的布隆过滤
- hutool-cache 简单缓存实现
- hutool-core 核心,包括Bean操作、日期、各种Util等
- hutool-cron 定时任务模块,提供类Crontab表达式的定时任务
- hutool-crypto 加密解密模块,提供对称、非对称和摘要算法封装
- hutool-db JDBC封装后的数据操作,基于ActiveRecord思想
- hutool-extra 扩展模块,对第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等)
- hutool-http 基于HttpUrlConnection的Http客户端封装
- hutool-log 自动识别日志实现的日志门面
- hutool-setting 功能更强大的Setting配置文件和Properties封装
- hutool-script 脚本执行封装,例如Javascript
- hutool-system 系统参数调用封装(JVM信息等)
- hutool-json JSON实现
- hutool-captcha 图片验证码实现
- hutool-poi 针对POI中Excel和Word的封装
- hutool-socket 基于Java的NIO和AIO的Socket封装
我们挑几个可以比较常用,而且比较放心的,相对于公司的系统来说,肯定很多人会说,这种 Jar 会不会不安全呢?毕竟互联网时代,安全性要求是非常重要的,既然我们不用那些涉及到一些安全的用例的话,基础的我们还是可以拿过来使用的,不是么?
比如说我们最经典的转型,相信大家肯定使用过 HttpServletRequest ,也就是 HttpServletRequest 获取的Parameter ,然后再转型成我们所需要的类型就像下面:
HttpServletRequest.getParameter("")
然后我们就得先转换成 String ,然后再去转换成我们想要的类型。
而在 Hutool 里面,就有一个类提供给我们使用,Convert 类。
转换为字符串: long[] b = {1,2,3,4,5}; String bStr = Convert.toStr(b); System.out.println(bStr);
Convert.convert(Class, Object)方法可以将任意类型转换为指定类型,Hutool中预定义了许多类型转换,例如转换为URI、URL、Calendar等等,这些类型的转换都依托于ConverterRegistry类。
在源码里面也是有注释的,我们肯定去扒拉一下看看源码不是么?
/** * 转换值为指定类型 * * @param <T> 目标类型 * @param type 类型 * @param value 值 * @return 转换后的值 * @since 4.0.0 * @throws ConvertException 转换器不存在 */ public static <T> T convert(Class<T> type, Object value) throws ConvertException{ return convert((Type)type, value); } /** * 转换值为指定类型 * * @param <T> 目标类型 * @param reference 类型参考,用于持有转换后的泛型类型 * @param value 值 * @return 转换后的值 * @throws ConvertException 转换器不存在 */ public static <T> T convert(TypeReference<T> reference, Object value) throws ConvertException{ return convert(reference.getType(), value, null); }
不得不说,这玩意还真好用,而且你如果在百度上去搜索关于这方面的东西,有些时候还会发现,有人会把里面的源码给拆出来,自己封装成 Utils ,这种可能是觉得引入外面的 Jar 不是很靠谱,于是就把 Jar 里面的方法什么的都给重新封装了一下,作为自己用。
上面这部分阿粉接了个图,发现公司的某个项目中就是直接把 Conver 这个类直接拷贝了一份,然后当做了自己的类进行调用,不得不说,佩服!
提供的算法
Hutool 不光提供了一些基础工具类的使用,同时还提供了一些算法,比如说:HashUtil
- additiveHash 加法hash
public static int additiveHash(String key, int prime) { int hash, i; for (hash = key.length(), i = 0; i < key.length(); i++) { hash += key.charAt(i); } return hash % prime; }
- 旋转hash
public static int rotatingHash(String key, int prime) { int hash, i; for (hash = key.length(), i = 0; i < key.length(); ++i) { hash = (hash << 4) ^ (hash >> 28) ^ key.charAt(i); } // 使用:hash = (hash ^ (hash>>10) ^ (hash>>20)) & mask; // 替代:hash %= prime; // return (hash ^ (hash>>10) ^ (hash>>20)); return hash % prime; }
- 一次一个hash
public static int oneByOneHash(String key) { int hash, i; for (hash = 0, i = 0; i < key.length(); ++i) { hash += key.charAt(i); hash += (hash << 10); hash ^= (hash >> 6); } hash += (hash << 3); hash ^= (hash >> 11); hash += (hash << 15); // return (hash & M_MASK); return hash; }
工具类中融合了各种hash算法,不单单是这么几种,还有好多,像:RS算法hash、JS算法、DEK算法、DJB算法。。。
总之,都是比较不错的呀,至少比我们去百度上面搜索的这种靠谱呀。
而且还包括了加密解密,SecureUtil 其中有对称加密-SymmetricCrypto,也有非对称加密-AsymmetricCrypto。
非常多的内容值得大家去挖掘,如果想看官方文档,阿粉也放给大家,大家可以去看看!
Hutool官方文档(https://hutool.cn/docs/)
总结
作为一名开发人员,保证开发效率才是第一位的,善于使用工具,对你的开发进度是非常有帮助的,你学会了么?