頂級程式設計師常用的 14 個開源框架,YYDS

1。 Netty

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

頂級程式設計師常用的 14 個開源框架,YYDS

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

2。 SpringBoot

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

頂級程式設計師常用的 14 個開源框架,YYDS

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

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

3。 工具類庫

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

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

頂級程式設計師常用的 14 個開源框架,YYDS

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

4。 單元測試

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

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

頂級程式設計師常用的 14 個開源框架,YYDS

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

5。 JMH

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

頂級程式設計師常用的 14 個開源框架,YYDS

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

6。 OkHTTP

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

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

頂級程式設計師常用的 14 個開源框架,YYDS

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

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

7。 資料庫連線池

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

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

頂級程式設計師常用的 14 個開源框架,YYDS

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

8。 caffeine

堆內快取,首選caffeine。很長一段時間,我都在用

Guava

LoadingCache

。自從測試caffeine之後,我就決定是它了。

它結合了LRU和LFU,兩者合體之後,變成了新的

W-TinyLFU

演算法,命中率非常高,記憶體佔用也更加的小。

頂級程式設計師常用的 14 個開源框架,YYDS

在SpringBoot裡,透過提供一個

CacheManager

的Bean,即可與

Springboot-cache

進行整合,可以說是很方便了。

9。 hazelcast

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

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

頂級程式設計師常用的 14 個開源框架,YYDS

hazelcast可以以jar包的方式整合在Java應用中,自身同時作為客戶端和服務端,元件多節點的叢集。它提供了類似redisson一樣的功能齊全的分散式資料結構,比如Queue,你只需要直接在Java程式碼中呼叫相應的API,它就能把資料同步到所有的節點上去。

10。 日誌元件

日誌元件是常用的類庫,最早得到廣泛使用的是

log4j

,而現階段比較流行的是

slf4j+logback

。由於這些類庫非常的好用,JDK自帶的

JUL

反而無人問津。

頂級程式設計師常用的 14 個開源框架,YYDS

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

11。 JSON、XML、YAML解析

由於Fastjson頻頻爆出漏洞,現在在Java中使用最廣泛的JSON解析類庫,就是

jackson

庫。它最主要的入口工具類是

ObjectMapper

,解析方法是執行緒安全的,我們可以在整個專案中共享一個解析物件。

頂級程式設計師常用的 14 個開源框架,YYDS

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

12。 Jolokia

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

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

頂級程式設計師常用的 14 個開源框架,YYDS

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

13。 hibernate-validator

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

頂級程式設計師常用的 14 個開源框架,YYDS

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

14。 freemarker

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

頂級程式設計師常用的 14 個開源框架,YYDS

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

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

End

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

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

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