Java常用的開發庫推薦

我是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,稍微瞭解下這些工具包封裝了什麼功能。等到自己要意識到需要封裝某個功能時,先把這些工具包的文檔給逛一遍,真的找不到時,沒有再自己實現

不要重複造輪子,不要重複造輪子,不要重複造輪子。

我貼下這些工具包的鏈接🔗 大家如果對這個不瞭解的話,建議去看看

我截取hutool文檔的一部分信息,大家稍微可以感受下,我個人認爲還是比較全的:

模塊 介紹
hutool-aop JDK動態代理封裝,提供非IOC下的切面支持
hutool-bloomFilter 布隆過濾,提供一些Hash算法的布隆過濾
hutool-cache 簡單緩存實現
hutool-core 核心,包括Bean操作、日期、各種Util等
hutool-cron 定時任務模塊,提供類Crontab表達式的定時任務
hutool-crypto 加密解密模塊,提供對稱、非對稱和摘要算法封裝
hutool-db JDBC封裝後的數據操作,基於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-json JSON實現
hutool-captcha 圖片驗證碼實現
hutool-poi 針對POI中Excel和Word的封裝
hutool-socket 基於Java的NIO和AIO的Socket封裝
hutool-jwt JSON 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面試,對線面試官系列持續更新中!

【對線面試官+從零編寫Java項目】 持續高強度更新中!求star!!原創不易!!求三連!!

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章