本文转载自微信公众号《Java极客技术》,作者:鸭血粉。转载本文请联系Java极客技术公众号。前段时间阿芬在公司做一个功能的时候,有一个比较特殊的需求,需要在页面上显示辛丑年的x月x日,所以阿芬就想知道有没有人做过这件事天干地支的封装,能不能集成到Utils中,以后一起用吧,于是开始在google上搜索相关内容,不知道没搜到没有。搜索的时候惊呆了,直接出现了一个打包完整的Jar。阿芬用了之后,把这个Jar包的依赖添加到自己的项目中,然后去源码里翻了翻。他觉得里面的内容真的不错,就决定分享给大家。Hutool是一个封装了很多功能的Jar。如果不是因为需求,阿芬可能很久都不认识他了。我们来看看阿芬的需求是什么样的。阿芬之前的要求是在后端返回一个所谓的干支农历,但这件事可没那么容易。如果你想自己找一些Utils,可以看看。我们需要专门获取这个Utils,然后计算出干支的时间顺序。是不是有点麻烦,不过我们的HutoolJar很简单,ChineseDatechineseDate=newChineseDate(date);Stringcyclic=chineseDate.getCyclical();上面代码是获取干支的年份,比如他还获取了节日及其作用:/***获取节日**@return获取农历节日*/publicStringgetFestivals(){returnStrUtil.join(",",LunarFestival.getFestivals(this.year,this.month,day));}/***获取年份生肖**@return获取年份生肖*/publicStringgetChineseZodiac(){returnZodiac.getChineseZodiac(this.年);}如果你只是认为这个Jar只能给提供这种帮助,那你就大错特错了。它里面封装了很多很多的方法。您可以选择导入包。如果你想使用hutool的所有Jars,你可以引入所有依赖:cn.hutoolhutool-all5.5.2如果只想使用其中一个功能,那么可以选择其他Jar依赖导入,例如:cn.hutoolhutool-core5.6.5让我们看看Jarshutool有什么了不起的。hutool-aopJDK动态代理包,提供非IOC方面的支持hutool-bloomFilterBloomfilter,提供一些Hash算法的Bloomfilterhutool-cache简单的缓存实现hutool-core核心,包括Bean操作,date,各种Util等hutool-cron定时任务模块,提供Crontab表达式等定时任务hutool-crypto加解密模块,提供对称、非对称和抽象算法封装hutool-dbJDBC封装数据操作,基于ActiveRecord思想hutool-extra扩展模块,用于第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等)hutool-http基于HttpUrlConnection的Http客户端封装hutool-log自动日志识别日志门面hutool-setting更强大的hutool-script脚本执行封装,如Javascripthutool-system系统参数调用封装(JVM信息等)hutool-jsonJSON实现hutool-captcha图片验证fication代码实现hutool-poiforExcelandWordinPOI封装hutool-socket基于Java的NIO和AIOSocket封装下面我们挑几个比较常用也比较放心的。和公司的系统比起来,很多人肯定会说,这样的Jar会不会不安全?毕竟在互联网时代,安全需求非常重要。由于我们不使用那些涉及一些安全性的用例,我们仍然可以使用基本的,不是吗?比如我们最经典的改造,相信大家一定用过HttpServletRequest,也就是HttpServletRequest得到的Parameter,然后改造成我们需要的类型如下:HttpServletRequest.getParameter("")然后我们要进行转换先转成String,再转成我们想要的类型。在Hutool中,有一个类供我们使用,Convert类。转换为字符串:转换为字符串:long[]b={1,2,3,4,5};StringbStr=Convert.toStr(b);System.out.println(bStr);Convert.convert(Class,Object)方法可以将任何类型转换为指定类型。Hutool中预定义了很多类型的转换,比如转换为URI、URL、Calendar等,这些类型的转换都是基于ConverterRegistry类。源码里也有注释,一定要去看源码对不对?/***转换后的值为指定类型**@param目标类型*@paramtype类型*@paramvalue值*@转换后返回值*@since4.0.0*@throwsConvertExceptionConverter不存在*/publicstaticTconvert(Classtype,Objectvalue)throwsConvertException{returnconvert((Type)type,value);}/***转换后的值指定类型**@paramTargetType*@paramReference持有转换泛型的类型引用type*@paramValueValue*@returnconvertedvalue*@throwsConvertExceptionConverterdoesnotexist*/publicstaticTconvert(TypeReferencereference,Objectvalue)throwsConvertException{returnconvert(reference.getType(),value,null);}我必须话说,这个东西真的很好用,百度搜一下这方面的东西,有时候会发现有人会把里面的源码拆开,自己打包成Utils。这可能是因为引入外部Jar不太靠谱,所以他们把Jar里面的方法重新打包等等。拿去自用。上面这部分,阿芬拍了一张图,发现公司某项目直接复制了Conver类,然后作为自己的类调用。不得不说,我很佩服!Hutool提供的算法不仅提供了一些基础工具类的使用介绍,还提供了一些算法,如:HashUtiladditiveHashadditionhashpublicstaticintadditiveHash(Stringkey,intprime){inthash,i;for(hash=key.length(),i=0;i>28)^key.charAt(i);}//使用:hash=(hash^(hash>>10)^(hash>>20))&mask;//替换:hash%=prime;//return(hash^(hash>>10)^(hash>>20));returnhash%prime;}一次一个哈希publicstaticintoneByOneHash(Stringkey){inthash,i;for(hash=0,i=0;i>6);}hash+=(hash<<3);hash^=(hash>>11);hash+=(hash<<15);//return(hash&M_MASK);returnhash;}工具类中的fusionhash算法有很多种,不止这几种,还有很多,比如:RS算法hash,JS算法,DEK算法嗯,DJB算法。..总之,都还不错,至少比我们百度搜的靠谱。它还包括加密和解密。SecureUtil有对称加密-SymmetricCrypto和非对称加密-AsymmetricCrypto。很多内容值得挖掘。如果你想看官方文档,阿粉也会贴出来给你看。你可以去看看!Hutool官方文档(https://hutool.cn/docs/)总结说作为开发者,保证开发效率是第一位的。善于使用工具对你的开发进度很有帮助。你学会了吗?