关于java:Java常用的开发库推荐

42次阅读

共计 4620 个字符,预计需要花费 12 分钟才能阅读完成。

我是 3y,一年 CRUD 教训用十年的 markdown 程序员👨🏻‍💻

明天来讲讲来给大家聊聊开发提速的货色了:工具包 Lombok罕用库

01、什么是工具包

基本上,每个我的项目里都有一个包,叫做utils。这个包专门承载咱们本人我的项目的工具类,比方常见的DateUtilsHttpUtilsCollections

所谓 Utils 就是:这个货色咱们用得很多,然而原 API 不够好用,于是咱们给它封装为一个比拟通用的办法

如果是初学者,很多时候遇到这种相似的工具类也不会间接本人开写,会先去搜索引擎里找一通。找到了之后,看起来感觉能够就间接一个 ctrl+c ,一个ctrl +v 往本人的 main 办法一贴,搞点测试数据,看能不能 work 起来。

能 work 起来,那就给它取个名字,放在 utils 包下。一顿操作过后,发现自己这操作姿态就是完满!

殊不知,你想要的工具类 很可能 人家曾经写好对应的 jar 包,比某搜索引擎查到的某博客的代码牢靠多了。

晓得有此类jar 的人用得始终很香,不晓得的人可能就始终缺什么就去拷贝什么,代码搞得十分脏乱。

02、Java 工具包举荐

在 Java 畛域里,在业内比拟闻名的工具包有两个:commonsguava

国人保护的一个工具包:Hutool

如果有相干的需要的话,咱们在我的项目代码中能够尽可能应用这些工具包。它们的代码 个别状况下 都会比咱们本人写的要好,而且工具类就是为了帮咱们缩小重复性代码的,多用会使我的项目的可读性变得更高。

至于它们能干什么,如果没理解过的能够先逛下他们的 Guide,略微理解下这些工具包封装了什么性能。等到本人要意识到须要封装某个性能时,先把这些工具包的文档给逛一遍, 真的找不到时,没有再本人实现

不要反复造轮子,不要反复造轮子,不要反复造轮子。

我贴下这些工具包的链接🔗 大家如果对这个不理解的话,倡议去看看

  • https://commons.apache.org/
  • https://github.com/google/guava/wiki
  • https://www.hutool.cn/docs/#/

我截取 hutool 文档的一部分信息,大家略微能够感触下,我集体认为还是比拟全的:

模块介绍
hutool-aopJDK 动静代理封装,提供非 IOC 下的切面反对
hutool-bloomFilter布隆过滤,提供一些 Hash 算法的布隆过滤
hutool-cache简略缓存实现
hutool-core外围,包含 Bean 操作、日期、各种 Util 等
hutool-cron定时工作模块,提供类 Crontab 表达式的定时工作
hutool-crypto加密解密模块,提供对称、非对称和摘要算法封装
hutool-dbJDBC 封装后的数据操作,基于 ActiveRecord 思维
hutool-dfa基于 DFA 模型的多关键字查找
hutool-extra扩大模块,对第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等)
hutool-http基于 HttpUrlConnection 的 Http 客户端封装
hutool-log自动识别日志实现的日志门面
hutool-script脚本执行封装,例如 Javascript
hutool-setting性能更弱小的 Setting 配置文件和 Properties 封装
hutool-system零碎参数调用封装(JVM 信息等)
hutool-jsonJSON 实现
hutool-captcha图片验证码实现
hutool-poi针对 POI 中 Excel 和 Word 的封装
hutool-socket基于 Java 的 NIO 和 AIO 的 Socket 封装
hutool-jwtJSON Web Token (JWT)封装实现

03、Lombok

我是在实习的时候接触 Lombok 这个工具的。他给我的第一感触就是:再也不必本人生成 set/get 办法了

其实用上了 IDE 当前,生成 set/get 办法就是一个快捷键的事,然而每当咱们要减少 / 删除 / 批改类的属性时,咱们都须要额定去为这些变动去生成一次。不过,这如同也不是事。毕竟减少 / 删除 / 批改的工作也不是特地多。

其实 Lombok 能做的事不仅仅只有 set/get 办法,用上了当前我还是比拟举荐用的。像 @Builder@Slf4j@Data 这些注解我在我的项目中是常常用到的,如果还对 Lombok 不理解的话,能够去它的官网张望一波。

https://projectlombok.org/features/all

有没有人会好奇 Lombok 它是怎么做到的?已经有个群里的小伙伴有遇到过这个面试题:你晓得 Lombok 的原理是什么吗?

这个我在《对线面试官》系列的第一篇《注解》已经聊过。其实不是特地简单的货色,咱们只有能想出 Java 的编译时大抵的步骤以及注解的基础知识,这题就能答上了。

  1. 注解是有生命周期的 @Retention 有 SOURCE、CLASS 和 RUNTIME 三个常量,应用 Lombok 的注解就是 SOURCE 阶段的
  2. .java文件被编译的时候,略微简化下能够总结为几个步骤:语法分析 -> 语义剖析 ->注解解决->class 文件
  3. JDK 提供了 Hook,咱们想要在编译期间做注解相干的事,能够继承 AbstractProcessor 并实现 process 办法(Lombok 就是这么干的)

04、JSON 库

当初 Java 后端开发基本上是离不开 JSON 了,所以咱们须要有 JSON 库 帮咱们做序列化和反序列化

  • 前后端接口之间的交互基本上都是 JSON 格局了
  • 咱们有的时候为了不便,也会间接把数据间接转成 JSON 存储起来(这里的存储能够是 MySQL,能够是 HBase,能够是 Redis 等等)

写到这里,我翻看了下我以前大学时候的学习笔记。我以前刚学 JSON 的时候,那时候跟着视频在学 Spring 和 Strtus2,他俩都内置了 JSON 的解析库。我过后的程度,跟着视频学习调个 API 对我没什么难度的,所以也不以为然。

没想到,那时候视频教程还教我:如果抛离了 Spring 和 Struts2 环境下,那该怎么不便地操作 JSON,而后在 classpath 果决引入了 json-lib 的包 … 看回以前大学的笔记,真的是回顾满满 …

不扯别的了,说回当初吧。当初 Java 后端个别应用比拟多的 JSON 库有 fastjsonGsonJackson

我以前在公司用 FastJson 比拟多的,API 应用非常简单,日常用得也很难受。然而,我是经验过已经要强制降级 fastjson 版本的人!应该是 19 年吧,那时候平安团队通知咱们须要强制降级 fastjson 的版本,大略就是 fastjson 有破绽,肯定得降级。这咱们作为库的应用方,没方法,那只能降级吧。

后果,没过几天。平安团队又拉了个群,说还是得降级 xxx 版本以上,之前降级过的版本还有问题 … 团队内为了降级 fastjson 版本也遇到过其余的坑,反正就被弄得很烦。

网上也有很多比照这几个 JSON 库的文章(次要的指标是性能、稳固),有趣味的小伙伴能够去读读。

不过,austin 我的项目还是抉择 fastjson 作为 JSON 次要的序列化库(多点容纳

05、HTTP 库

原本 HTTP 库我是曾经忘的了。但正当我要实现发送短信性能的时候,我才恍然想起,HTTP 也是常常用到的啊!于是火急地在发送文章之前补充下。

不晓得你们第一次用 Java 调用 HTTP 的时候,是什么情绪。在我印象里,就感觉这货色简单得一批,调个 HTTP 真麻烦!起初,工作了当前,在我的项目里曾经有大佬封装过 HTTP 啦。但还是有的时候,感觉 HTTP 调用就是那么的简单(哎,各种头信息,一不小心设置错,那就是半天)

但不论怎么样,HTTP 调用是十分常见的,很多公司对外的接口简直都会提供 HTTP 调用。比方咱们调用腾讯的 API 下发微信类音讯,调用各个渠道商发送短信等等等。

扯远了,还是先回到 HTTP 库吧。在 Java 生态中,HTTP 库能够大抵分为三类:

  • HttpURLConnection
  • Apache HttpClient
  • OkHttp

HttpURLConnection 是 JDK 原始提供的 HTTP 库,它是没有实现 HTTP 连接池的(连接池还是十分重要的,池的概念我在这就不过于解释了)。我之前我的项目用的 HTTP 库都是 Apache HttpClient 根底上封装的(Apache 出品的品质也有保障),而 OkHttp 能够说是后起之秀了(当初安卓端的 HTTP 库根本都是基于 OkHttp)

个别咱们应用这些 HTTP 工具库,都须要在原生的根底上再写 Utils 来简化对 HTTP 的调用,有 Utils 环境下就会有各类的工具包:

  • 比方,下面提到的 Hutool 就对原生的 HttpURLConnection 进行封装(不过其封装是没用线程池)
  • Square 公司对本人出品的 OkHttp 又进行二次封装,开源出Retrofit(这个在安卓用得很多)
  • Spring 环境下提供 RestTemplate 多种拜访近程 Http 服务的办法(默认状况下是无线程池的,但能够应用Apache HttpClientOkHttp将其封装至RestTemplate
  • SpringCloud 环境下提供 OpenFeign 进而调用 HTTP 服务
  • 国产 HTTP 工具库 Forest:对HttpclientOkHttp进行封装

这次我抉择 OkHtpp 作为 austin 的 http 库

为什么 OkHtpp?向前看吧,OkHtpp 作为 Http 库的确当初未然成为标杆(至多在安卓火爆了,很多公司的 SDK 下都用的 Okhttp 作为 Http 库的依赖了)。在 Spring 环境下 RestTemplate 也不太好用,我这我的项目又没上 SpringCloud,天然就没用上 OpenFeignRetrofit 在安卓用得比拟多(Java 后端貌似绝对较少)。

所以我抉择了OkHttp

06、总结

这篇文章是来讲 austin 我的项目所应用到的工具包,对这些曾经懂的人看完可能会感觉有点水,没必要。

但有很多想要跟我一起学习这个我的项目的同学很多都是没做过我的项目的,所以我还是感觉有必要收回来总结下。很多时候咱们所做的货色,他人感觉很 low,其实就在于 信息差

我感觉浏览这篇文章的,必定也会有某些曾经工作的小伙伴是没听说过 Lombok、没用过 Guava 这类工具的(Commons 应该多多少少都会用过,可能是潜在地用了,但不晓得是有专门的 apache 工具类库)。

其实这类工具包在我的项目里应用的频率会十分高,用了这些工具库会让咱们的我的项目代码变得更加简洁,代码可读性和维护性对于一个我的项目而言是十分重要的。

对于这类工具,我的倡议是有空的时候下来看看它能提供什么性能。等发现自己要封装一个工具类的时候,进去看看它们是不是曾经实现了,如果实现了间接用就完事了。如果对性能感兴趣的话,看下大佬们是怎么实现的,如果是本人实现的话可能会有哪些地方没想到。

必定还有很多我还不理解又十分好用的工具包,求各位在评论区举荐举荐啊!!!这是 austin 我的项目的第三篇,目前曾经更新至 11 篇,欢送跟着我的步调一起干我的项目!

关注我的微信公众号【Java3y】来聊点不一样的!【对线面试官 + 从零编写 Java 我的项目】继续高强度更新中!求 star!!原创不易!!求三连!!

Gitee 链接:https://gitee.com/austin

GitHub 链接:https://github.com/austin

正文完
 0