这不是标题党,今天给大家推荐一个很棒的国产工具类库:Hutool。可能有很多朋友已经知道这个类库了,甚至在已经在使用了,如果你还没有使用过,那不妨去尝试一下,我们项目组目前也在用这个。这篇文章来简单介绍一下这个类库。

官网地址:https://www.hutool.cn/

Hutool是Hu + tool的自造词,前者是作者致敬他的“前任公司”,后者为工具之意,谐音“糊涂”,寓意追求“万事都作糊涂观,无所谓失,无所谓得”的境界。看来写这个类库的作者(不止一个)也是文艺青年啊。

Hutool是一个Java工具包,它可以帮助我们简化每一行代码,减少每一个方法,让Java语言也可以“甜甜的”。所以很多人称之为:小甜甜。

我们使用该工具类,只需要引入它的依赖即可。

<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.2.1</version>
</dependency>

可能很多国内程序员都不喜欢看官方文档,因为基本上都是英文的,其实我还是鼓励大家去看英文文档的。但这个工具类的参考文档和API文档全是中文的,中文的,中文的,可以说能满足很大一部分开发人员的需求了。

先举一个官方提供的例子,模拟一下表单提交,来一起感受一下 Hutool 的便捷。

public class Demo {
public static void main(String[] args) {
File file = new File("D:\face.jpg");
// 第一种方式:自定义构建表单
HttpRequest request = HttpRequest
.post("http://ip:port/xxxx")
.form("file", file)
.form("fileType", "jpg");
HttpResponse response = request.execute();
System.out.println(response.body());
// 第二种方式:使用统一表单,Http模块会自动识别参数类型,并完成上传
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("author", "倪升武");
paramMap.put("wechat", "程序员私房菜");
String result = HttpUtil.post("http://ip:port/xxxx", paramMap);
System.out.println(result);
}
}

当然,Hutool 还有其他很多工具,比如对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,同时也提供以下组件:

上文导入的依赖是 hutool-all,意味导入所有的模块,当然,我们也可以根据实际需要对上图中的每个模块进行单独的依赖导入。由于篇幅原因,我简单介绍其中两个模块,其他的模块大家可以去看看官方文档,去尝试一下,还是有很多东西值得我们去学习的。

HtmlUtil(HTML工具类)

我是蛮喜欢这个工具类的,用的最多的就是 HtmlUtil.encode,可以将一些字符转化为安全字符,防止xss注入和SQL注入,比如我之前做网站的时候就用到了这个来处理评论的提交。

comment.setContent(HtmlUtil.encode(content));

它会转义文本中的HTML字符为安全的字符,这样比较安全。另外,HtmlUtil 还提供了以下方法,有兴趣的朋友可以去试一下。

CronUtil(定时任务)

我们使用 CronUtil 时,只需要在 src/main/resources/config 下放入 cron.setting 文件(默认是这个路径的这个文件),然后在文件中放入定时规则,如:

[com.example.hutool.cron]
TimerTest.runTask = */2 * * * * ?

这表示:每隔 2 秒钟执行一遍 com.example.hutool.cron 包下的 TimerTest 类中的 runTask 方法。这就很方便了,我在项目启动时就把定时器打开即可,假如你是 Spring Boot 工程,就可以这么做:

/**
* 项目初始化配置
* @author shengwu ni
* @date 2018-12-06
*/
@Component
public class InitConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(InitConfig.class);
@PostConstruct
public void initTimer() {
LOGGER.info("项目启动,开启Hutool定时任务……");
CronUtil.setMatchSecond(true);
CronUtil.start();
}
}

这样就会每隔 2 秒中去执行一下目标方法。代码中的 setMatchSecond(true) 是设置支持秒级别定时任务,这么做是为了兼容 Quartz 表达式,5位表达式、6位表达式都兼容。可以说是很棒了。

该类库的其他工具类我就不一一介绍了,感兴趣的读者可以自己去官网看一下,我觉得最吸引人的还是非常全的中文文档和API文档,建议大家去阅读一下,相信你也会喜欢上这个国产类库。

我为什么推荐大家都去尝试一下这个类库呢?倒不是说推荐大家一定去使用,我们可以去体验一下该工具类是否真的可以简化我们的编码。这个工具类库一开始,其实就是项目中普通的 Util 工具类,慢慢丰富,最后衍生出一个类库,里面的大部分源码我相信大部分程序员都可以看得懂,也是一个很好的学习机会。再说了,我的哪一篇文章让你失望过?(得瑟脸)

读完这篇文章,相信你会转发给更多的人。

Java程序员都应该去使用一下这款强大的国产工具类库的更多相关文章

  1. Java程序员都需要懂的「反射」

    前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 今天来简单写一下Java的反射.本来没打算写反射 ...

  2. 2020年薪30W的Java程序员都要求熟悉JVM与性能调优!

    前言 作为Java程序员,你有没有被JVM伤害过?面试的时候是否碰到过对JVM的灵魂拷问?   一.JVM 内存区域划分 1.程序计数器(线程私有) 程序计数器(Program Counter Reg ...

  3. 99.9%的Java程序员都说不清的问题:JVM中的对象内存布局?

    本文转载自公众号:石彬的架构笔记,阅读大约需要8分钟. 作者:李瑞杰 目前就职于阿里巴巴,资深 JVM 研究人员 在 Java 程序中,我们拥有多种新建对象的方式.除了最为常见的 new 语句之外,我 ...

  4. 90% 的 Java 程序员都说不上来的为何 Java 代码越执行越快(1)- JIT编译优化

    麻烦大家帮我投一票哈,谢谢 经常听到 Java 性能不如 C/C++ 的言论,也经常听说 Java 程序需要预热,那么其中主要原因是啥呢? 面试的时候谈到 JVM,也有很多面试官喜欢问,为啥 Java ...

  5. 90% 的 Java 程序员都说不上来的为何 Java 代码越执行越快(2)- TLAB预热

    经常听到 Java 性能不如 C/C++ 的言论,也经常听说 Java 程序需要预热,那么其中主要原因是啥呢? 面试的时候谈到 JVM,也有很多面试官喜欢问,为啥 Java 程序越执行越快呢? 一般人 ...

  6. 阿里面试Java程序员都问些什么?

    刚开始也是小白,也是一步步成成起来的.需要提的一点是,你将来是需要靠这个吃饭的,所以请对找工作保持十二分的热情,而且越早准备越好. 阿里一面 一面是在上午9点多接到支付宝的面试电话的,因为很期望能够尽 ...

  7. 看完这篇微服务架构设计思想,90%的Java程序员都收藏了

    本博客强烈推荐: Java电子书高清PDF集合免费下载 https://www.cnblogs.com/yuxiang1/p/12099324.html 微服务 软件架构是一个包含各种组织的系统组织, ...

  8. Java程序员都要懂得知识点:反射

    摘要:Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语 ...

  9. Java 程序员们值得一看的好书推荐

    "学习的最好途径就是看书",这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 能出版出来的书一定是经过反复的思考.雕琢和审核的,因此从专业性的角度来说,一 ...

随机推荐

  1. Nodejs通过Thrift操作hbase卡住原因分析及与javascript的垃圾回收机制的关系

    在最近使用Nodejs通过Thrift操作hbase的时候写了个脚本,不断发送http请求,从而取得hbase下所需的数据,但是在run的过程中for循环并没有执行完全,在执行一部分后会卡住,就再也进 ...

  2. 03-树1 树的同构(25 point(s)) 【Tree】

    03-树1 树的同构(25 point(s)) 给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为 ...

  3. Protocol_ISIS

    集成ISIS协议 作者:Danbo 2015-7-5 ISIS的意思是表示中间系统,并且是为OSI无连接网络协议(OSI Conectionless Network Protocol,CLNP)设计的 ...

  4. php高级技巧总结

    通过对<深入理解PHP:高级技巧.面向对象与核心技术>这本书的学习,总结出常用的php高级技巧,也方便自己以后查阅;我认为该书是php高级教程的葵花宝典,哈哈.里面的内容很实用,尤其是在项 ...

  5. linux应用之tomcat的安装及配置(centos)

    CentOS 6.6下安装配置Tomcat环境 [日期:2015-08-25] 来源:Linux社区  作者:tae44 [字体:大 中 小]   实验系统:CentOS 6.6_x86_64 实验前 ...

  6. Duplicate files copied in APK META-INF/DEPENDENCIES

    在app的目录下找到build.gradle 这个文件,在android标签的最后面加入以下信息: packagingOptions { exclude 'META-INF/DEPENDENCIES' ...

  7. php排序方法之快速排序

    $arr = array(3,55,45,2,67,76,6.7,-65,85,4); function quickSort($arr){ if (count($arr) <= 1){ retu ...

  8. [原创]java在线比较两个word文件

    一.项目背景 开发文档管理系统或OA办公系统的时候,实现在线处理word文档的功能比较容易,但是也经常会有客户提出文档版本管理的需求,这就需要同时在线打开两个word文件,对比两个不同版本的word文 ...

  9. hdu-5749 Colmerauer(单调栈)

    题目链接: Colmerauer Time Limit: 10000/5000 MS (Java/Others)     Memory Limit: 131072/131072 K (Java/Oth ...

  10. ubuntu下的google拼音输入法(终结版)

    声明:此文章是从我的51cto博客上搬至于此. Ubuntu下SCIM应该是最好的中文输入法了,它与搜狗差不多,下面介绍它的安装方法: 1)终端输入: sudo apt-get remove scim ...