頂級Javaer,常用的 14 個類庫

2021-12-26 IT服務圈兒

作者丨小姐姐養的狗02號

來源丨經授權轉自 小姐姐味道(ID:xjjdog)

昨天下載下來Java16嘗嘗鮮。一看,好傢夥,足足有176MB大。即使把jmc和jvisualvm給搞了出去,依然還是這麼大,真的是讓人震驚不已。

但即使JDK足夠龐大,它的功能也已經不夠用了。我們需要藉助於第三方庫,來完成企業級開發。比如,一個常見的SpringBoot服務,上百兆是輕輕鬆鬆的。

在這裡,我盤點一下項目中常用的工具類庫和Jar包,來看一看一個Java程式設計師要學多少東西才能走的更加長遠。

1. Netty

第一送給Netty。其實我是有私心的,也只有在使用Netty開發一些網絡應用的時候,我才能理直氣壯的不引入Spring這個目前變得越來越重的傢伙,還我一個清清爽爽的世界。

Netty已經成為了目前最流行的Java網絡編程框架。有了它,Java才有了與golang等語言相提並論的權利。

2. SpringBoot

在很多中小公司,Java企業級開發首選SpringBoot,這是沒得說的。由於它的應用實在是太廣泛,我這裡就不浪費筆墨做過多介紹了。

Spring當年的目標,是為了幹掉J2EE。屠龍的少年如今變成了龍,現在在幹著J2EE當年做的事情。

不過,儘量的做的輕量級,一直是它的主旋律,這一點從來沒有變過。因為錯的不是Spring,錯的是這個世界。

3. 工具類庫

由於歷史原因,apache-commons工具類庫,幾乎遍布了項目中的每個角落,比如lang3、beanutils、collections、codec等。個人覺得,apache-commons的很多工具,已經是過度設計了,在一些新項目裡,我已經很少使用了。

取而代之的,是大量使用guava工具類庫,以及國產的hutool工具類庫。有了這些工具,就不用再在項目裡寫一些拼拼湊湊,讓人難受的小工具類了。

說點有意思的事情,guava這個詞朗朗上口,它的中文意思是一種熱帶水果:番石榴,長的就像是小西瓜一樣。

4. 單元測試

JUnit幾乎成了Java單元測試的標配。JUnit5更是對整體模塊進行了重構。現在,它包含3個主要的模塊:JUnit Jupiter、JUnit Platform、JUnit Vintage等。

Vintage是為了兼容比較老的版本而存在的,Platform是為了兼容其他測試引擎,這樣在JUnit上使用Mockito也成為了可能。如果你的項目比較新,建議直接上Jupiter。

很多國外系統對單元測試看的比較重,這和國內的開發模式是不太一樣的。雖然說,單元測試是一個程式設計師的基本功,但離著普及還有一段距離。不過現在也有很多公司強制要求寫單元測試,以任務指標的形式存在。

5. JMH

JMH是最裝逼,最牛逼的基準測試工具套件,主要用在性能測試方面。如果定位到了熱點代碼,要測試它的性能數據,評估改善情況,就可以交給 JMH。它的測量精度非常高,可達納秒級別。

它能夠消除JIT的差異,測試出真正的代碼性能。JMH 已經在 JDK 12中被包含,其他版本的需要自行引入 maven。

6. OkHTTP

最新的JDK已經內置了HTTP的功能,但這種協議層面的東西,放在基礎類庫裡老感覺不是那麼妥當。

很長一段時間裡,Apache 的HttpClient統治了世界,甚至重構後在不同版本之間不能夠做到兼容。我更喜歡輕量級的OkHTTP多一些,第一次見它還是在Android的應用代碼裡,現在用在應用代碼裡也很香。OKHTTP的透明壓縮,顯得也更加智能一些。

像SpringCloud這樣的組件,在底層是可以選擇切換成HttpClient還是OkHTTP的。

應用層的協議變動都比較大,更新也比較快。比如HTTP2,Quic等支持,顯然要對整個類庫做很多的修改才能適配。

7. 資料庫連接池

SpringBoot2默認選擇了hikaricp作為連接池,據說是速度最快的連接池,而且代碼量非常的精簡。c3p0、dbcp等老舊的資料庫連接池已經慢慢退位。

hikaricp非常的卷,它採用無鎖化的思想,核心類庫只有ConcurrentBag一個,甚至使用Javassist修改字節碼來增加執行速度。

在國內,還有一個使用較為廣泛的連接池是Druid,它有著完整的監控功能。通過開啟後臺可以直接在web端查看整個連接池的狀態。

8. caffeine

堆內緩存,首選caffeine。很長一段時間,我都在用Guava的LoadingCache。自從測試caffeine之後,我就決定是它了。

它結合了LRU和LFU,兩者合體之後,變成了新的W-TinyLFU算法,命中率非常高,內存佔用也更加的小。

在SpringBoot裡,通過提供一個CacheManager的Bean,即可與Springboot-cache進行集成,可以說是很方便了。

9. hazelcast

說完了堆內的,就再說個堆外的。

除了有redis這種選擇之外,我們還可以選擇hazelcast。hazelcast採用raft算法進行分布式協調,在一致性方面強於redis。據hazelcast測試,在達到一定規模的時候,速度竟然比redis還快,hazelcast和redis甚至有過激烈的口水戰。

hazelcast可以以jar包的方式集成在Java應用中,自身同時作為客戶端和服務端,組件多節點的集群。它提供了類似redisson一樣的功能齊全的分布式數據結構,比如Queue,你只需要直接在Java代碼中調用相應的API,它就能把數據同步到所有的節點上去。

10. 日誌組件

日誌組件是常用的類庫,最早得到廣泛使用的是log4j,而現階段比較流行的是slf4j+logback。由於這些類庫非常的好用,JDK自帶的JUL反而無人問津。

slf4j是門面模式的典型應用,它本身是一套接口,背後可以使用logback和log4j。這些關係,我們能夠從上面的圖很容易的看出來。

11. JSON、XML、YAML解析

由於Fastjson頻頻爆出漏洞,現在在Java中使用最廣泛的JSON解析類庫,就是jackson庫。它最主要的入口工具類是ObjectMapper,解析方法是線程安全的,我們可以在整個項目中共享一個解析對象。

jackson庫不僅僅可以解析JSON,它還可以解析XML、YAML、TOML等。事實上,它的抽象接口,可以實現Avro、Protobuf、CSV等格式數據的加載,但我們最長使用的,就是它的JSON解析。

12. Jolokia

我相信J2EE當年的目的肯定是好的,但總是做一些又大又笨重的東西。JMS算一個,JMX也算一個。

JMX其實是非常不好用的,因為它把功能隔離在了Java體系之內。現在的Promethus監控系統就做的比較好,一切都是HTTP交互的文本格式。

Jolokia就可以提供JMX的遠程訪問方法,把JMX接口給強制轉化成HTTP接口,以便於其他的監控系統進行功能對接。從這個描述上來看,Jolokia就是一個適配器。不過,通過Agent或者Jar包的方式,它能讓ActiveMQ,JBoss等這些老掉牙的系統接入到現代化的監控系統中來,也算是大功一件。

13. hibernate-validator

hibernate留下了一個很棒的遺產,那就是它的驗證框架,它是Bean Validation 的參考實現,被廣泛的應用於資料庫模型校驗、參數校驗等領域。

在JPA中,@Table的欄位可以根據這些驗證,自動生成資料庫約束。在Spring的Controller中,也可以使用@Valid註解,來自動對傳入的對象進行參數驗證。

14. freemarker

FreeMarker 是一款模板引擎,在很早之前,我主要用它來生成Web頁面。

不過,隨著前後端分離的流行,我現在主要在一些代碼生成器工具中用到它。它的應用比較廣泛,比如做一個郵件模板,簡訊模板之類的。如果你寫過JSP的話,一定會知道它做的功能是類似的。

在Spring中,還有一個更加輕量級的模板引擎,叫做SPEL--一個表達式語言。你在@Value註解中所使用的語法就是它,它們都是類似的技術。

End

這些類庫,是我在工作中最長用到的,也是關注最多的。其實,一個Spring就夠大家折騰的了,但Spring的功能有時候仍然不夠,因為它本身更多的是一個整合型的工具,我們不得不關注到更底層的技術。

正是得益於這些穩定、可靠的類庫,我們的應用開發才能夠如此迅速。想要什麼功能?找個類庫吧,大體就能實現,這就是目前的開發幸福的地方。

獲得了如此方便快捷的功能,記得點讚鼓勵一下作者;遇到問題了,提個bug,修個錯誤,都是無聲的支持。就如同你看完本篇文章,順手點個讚點個再看一樣,道理都是一樣的。

相關焦點

  • Java必知必會的常用類庫
    今天整理一些在項目中常用的輪子,以便大家能在項目中使用。1、日誌框架沒個項目都不缺日誌記錄,Java領域更不缺日誌框架。列印日誌在項目開發中非常重要,日誌是排查問題的根本。Java領域的日誌框架主要有Log4j、Log4j2、Logbak、SLF4J2、XML類庫在JSON格式報文還沒很流行的時候,大部分數據傳輸都是使用XML格式的報文,Java也有很多處理XML報文的類庫。例如Dom4j、JDOM、JAXB 、XStream等,每個類庫都有自己的優點,在項目中可以按照需求挑選合適的類庫。
  • Java需要掌握的常用類庫
    java.lang      Java 程式語言的基本類庫2.       java.applet     創建 applet 需要的所有類3.       java.awt       創建用戶界面以及繪製和管理圖形、圖像的類4.
  • 學Java必須會的20種常用類庫和API,你知道幾個?
    本文總結了日誌、JSON解析、單測、XML解析、字節碼處理、資料庫連接池、集合類、郵件、加密、嵌入式SQL資料庫、JDBC故障診斷以及序列化等20個方面的常用類庫。相信對你還是有些幫助的!日誌庫是很常見的,因為你在每一個項目中都需要他們。列印日誌是伺服器端應用中最重要的事情,因為日誌是你了解你的程序發生了什麼的唯一途徑。
  • Java 必知必會的 20 種常用類庫和 API
    本文總結了日誌、JSON解析、單測、XML解析、字節碼處理、資料庫連接池、集合類、郵件、加密、嵌入式SQL資料庫、JDBC故障診斷以及序列化等20個方面的常用類庫。都是你日常開發經常可能要用到的,現在不用不要緊,但是你要知道有這麼一篇文章可以供你參考。不知道不可怕,可怕的是你不知道你不知道。
  • 223 個常用的自定義view和第三方類庫
    常用的自定義view和第三方類庫1、UIUtil for Android (歌詞控制項、打勾動畫、對比、衛星菜單、點讚、滑動按鈕、聯繫人排序...)7、通知工具類8、一個Android富文本類庫,支持圖文混排,支持編輯和預覽,支持插入和刪除圖片9、顯示富文本的TextView10、A fast PDF reader component
  • Java開發人員必知必會的20種常用類庫和API
    本文總結了日誌、JSON解析、單測、XML解析、字節碼處理、資料庫連接池、集合類、郵件、加密、嵌入式SQL資料庫、JDBC故障診斷以及序列化等20個方面的常用類庫。都是你日常開發經常可能要用到的,現在不用不要緊,但是你要知道有這麼一篇文章可以供你參考。不知道不可怕,可怕的是你不知道你不知道。
  • 2018年排名Top 100的Java類庫——在分析了277,975份源碼之後得出的結論
    往期榜單地址:2017年排名Top 100的Java類庫——在分析了259,885份源碼之後得出的結論2016年排名Top 100的Java類庫——在分析了47,251個依賴之後得出的結論今年,Top 100 Java類庫的排名發生了一個戲劇性的改變,榜首換人了,在此之前,JUnit已經蟬聯了三屆冠軍。
  • 盤點 35 個 Apache 頂級項目,我拜服了…
    看到這裡,我只能說 Apache 牛逼,下面我要整理的,可能都是我們日常開發過程中都會遇到的頂級開源項目,看看你用過幾個,沒用過的也可以學習了解下,日後總有用武之地。頂級開源項目基礎組件項目1、Apache(httpd)
  • 排名Top 16的Java實用類庫
    來自:Hollis(微信號:hollischuang)連結:http://www.hollischuang.com/archives/1606(點擊尾部閱讀原文前往)在Java中,有很多比較實用的類庫本文總結了最常用的Java中的實用類以及他們的最常用的方法。無論是類和類中方法都是按照流行程度來排序的。本文中列出來的類及方法都是經過大量實踐的常用類庫及方法,我們可以直接拿過來用。當然,這些方法實現的功能我們自己都能實現,但是既然已經有很成熟的方法可以供我們使用了,那麼就無需自己定義了。很多類和方法通過他們的名字其實可以理解出具體是做什麼的。
  • 除了Guava,Java開發者還值得了解的5個谷歌類庫
    Guava 是谷歌基於Java1.6的一個類庫集合的擴展項目,包含了許多谷歌核心的 Java 常用庫。
  • .NET開源工具類庫:Masuit.Tools
    本文介紹一個我的同事【懶得勤快】(人稱勤快哥,我們叫他騷哥)寫的一個.NET開源工具類庫項目,包含一些常用的操作類
  • 2017年前端框架、類庫、工具大比拼
    截至2017年5月,GitHub上的快速搜索顯示,有超過110萬個JavaScript項目。npmjs.org有50萬個可用的軟體包,每月下載量近100億次。本文將會討論目前最為流行的客戶端JavaScript框架、類庫和工具以及它們之間的基本差異。也許本文無法告訴你哪個是最好的,但是最適合自己項目的,就是最好的。類庫類庫是一個有組織的功能集合。
  • 25個頂級的jQuery表格插件
    jQuery 表格插件可以讓你創建各種各樣的表格布局,表格布局是報紙和雜誌中最常見的布局,現在的網站中也很常見,在這篇文章中,我向大家推薦25個jQuery
  • 常用的PHP類庫、資源和技巧大全(附資源地址)
    靜態站生成器( Static Site Generators )生成Web頁面內容的預處理工具8.HTTP用於HTTP和抓取網站的庫9.中間件( Middlewares )用於構建應用的類庫的中間件10.
  • Windows下面安裝使用Python與開源GIS相關類庫、工具的心得體會
    在《Python與開源GIS:數據處理、空間分析與地圖製圖》出版後,經常會有讀者詢問這樣一個問題:書中介紹的開源GIS類庫與工具如何在 Windows
  • 詳細介紹Android設計輔助類庫
    設計類庫中的FloatingActionButton  提供了一個一致性的實現方案,預設情況下,使用theme中的colorAccent進行著色。Material Design中有了 touch ripples 和 meaningful transitions 等動畫效果,新的設計類庫引入了 CoordinatorLayout ,這是一種可以對子視圖進行控制的布局效果。這種布局效果,設計類庫中的很多組件都受益。
  • Java世界最常用的工具類庫
    Java世界有很多實用的工具類框架,今天介紹3個使用頻率最高的框架。有很多實用的工具類並沒有全部列出來,只列出了最基礎的一部分,感興趣的小夥伴,可以看官方的api進行更深入的學習Apache CommonsApache Commons有很多子項目,常用的項目如下項目作用BeanUtils對Java Bean進行各種操作,複製對象,屬性Codec處理常用的編碼,解碼Collections擴展Java集合框架的操作I/O輸入/輸出工具的封裝Langjava
  • 推薦–個通用緩存接口抽象類庫:CacheManager
    CacheManager是–個緩存通用接口抽象類庫,它支持各種高速緩存提供者,例如Memcache,Redis,並且有許多先進的功能特性。
  • 3個常用的開源工具庫分享
    今天就分享幾個我常用的開源工具庫,希望對小夥伴們有幫助!OSHI[1] :一款為 Java 語言提供的基於 JNA 的(本機)作業系統和硬體信息庫。Hutool[3] : 一個非常實用的 Java 工具類庫,對文件、流、加密解密、轉碼、正則、線程、XML 等 JDK 方法進行了封裝。以下是較為詳細一點的介紹,建議小夥伴們看完,方便自己快速上手,用在自己的項目中來提高生產效率。