介紹
一個有經驗的Java開發人員特徵之一就是善於使用已有的輪子來造車。《Effective Java》的作者Joshua Bloch曾經說過:“建議使用現有的API來開發,而不是重覆造輪子”。在本文中,我將分享一些Java開發人員應該熟悉的最有用的和必要的庫和API。順便說一句,這裡不包括框架,如Spring和Hibernate因為他們非常有名,都有特定的功能。
本文總結了日誌、JSON解析、單測、XML解析、位元組碼處理、資料庫連線池、集合類、郵件、加密、嵌入式SQL資料庫、JDBC故障診斷以及序列化等20個方面的常用類庫。都是你日常開發經常可能要用到的,現在不用不要緊,但是你要知道有這麼一篇文章可以供你參考。
不知道不可怕,可怕的是你不知道你不知道。
一、日誌相關類庫
日誌庫是很常見的,因為你在每一個專案中都需要他們。列印日誌是伺服器端應用中最重要的事情,因為日誌是你瞭解你的程式發生了什麼的唯一途徑。儘管JDK附帶自己的日誌庫,但是還是有很多更好的選擇可用,例如Log4j、SLF4j和LogBack。
Java開發人員應該熟悉日誌記錄的利弊,並且瞭解為什麼SLF4J要比Log4J要好。
二、JSON解析庫
在當今世界的web服務和物聯網中(IoT),JSON已經取代了XML,成為從客戶端到伺服器傳送資訊的首選協議。有一個好訊息和一個壞訊息。壞訊息是JDK沒有提供JSON庫。好訊息是有許多優秀的第三方庫可以用來解析和建立JSON訊息,如Jackson 和 Gson
一個Java web開發人員應該熟悉Jackson 和 Gson這兩種中的至少一種庫。
三、單元測試庫
單元測試技術的使用,是區分一個一般的開發者和好的開發者的重要指標。程式員經常有各種藉口不寫單元測試,但最常見的藉口就是缺乏經驗和知識。常見的單測框架有JUnit, Mockito和PowerMock。
四、通用類庫
有幾個很好的第三方通用庫可供Java開發人員使用,例如Apache Commons和Google Guava。我會經常在我的程式碼中使用這些通用類庫,因為這些類庫都是經過無數開發者實踐過的,無論是實用性還是在效能等方面都是最佳的。
五、Http 庫
我不是很喜歡JDK的一個重要原因就包括他們缺乏對HTTP的支援。雖然可以使用java.net包類,但是這和直接使用像Apache HttpClient和HttpCore等開源類庫比起來麻煩太多了。
儘管JDK 9將開始HTTP 2.0,也對HTTP的支援做了最佳化,但是我還是強烈建議所有的Java開發人員熟悉流行的HTTP處理類庫,例如HttpClient和HttpCore HTTP等庫。
六、XML解析庫
市面上有很多XML解析的類庫,如Xerces, JAXB, JAXP, Dom4j, Xstream等。Xerces2是下一代高效能,完全相容的XML解析工具。Xerces2定義了 Xerces Native Interface (XNI)規範,並提供了一個完整、相容標準的 XNI 規範實現。該解析器是完全重新設計和實現的,更簡單以及模組化。
七、Excel讀寫庫
許多應用程式需要提供把資料匯出到Excel的功能,如果你要做相同的Java應用程式,那麼你需要Apache POI API。
這是一個非常豐富的類庫,你可以從Java程式讀寫XLS檔案。
八、位元組碼庫
如果你正在編寫一個框架或者類庫。有一些受歡迎的位元組碼庫如javassist和Cglib Nodep可以供你選擇,他們可以讓你閱讀和修改應用程式生成的位元組碼。
Javassist使得JAVA位元組碼操作非常簡單。它是一個為編輯Java位元組碼而生的類庫。ASM是另一個有用的位元組碼編輯庫。
九、資料庫連線池庫
如果你的Java應用程式與資料庫互動不是使用資料庫連線池庫的話,那麼你就大錯特錯了。因為在執行時建立資料庫連線非常耗時並且會拖慢你的程式。所以牆裂建議使用,有些好用的連線池可供選擇,如Commons Pool 和 DBCP。
在web應用程式中,web伺服器通常提供了這些功能。但是在java專案中需要把資料庫連線池的類庫匯入到應用中。
十、訊息傳遞庫
像日誌和資料庫連線池一樣,訊息傳遞也是很多實際的Java專案中必備的。Java提供了JMS Java訊息服務,但這不是JDK的一部分,你需要單獨的引入jms.jar。類似地,如果您準備使用第三方訊息傳遞協議,Tibco RV是個不錯的選擇。
十一、PDF處理庫
除了Excel和Word,PDF也是一種常用的檔案格式。如果你的應用程式要支援PDF格式的檔案處理,你可以使用iText和Apache FOP類庫。兩者都提供了非常有用的PDF處理功能。
十二、日期和時間庫
在Java之前,JDK的日期和時間庫一直被人們所詬病,比如其非執行緒安全的、不可變的、容易出錯等。很多開發人員會選擇更好用的JodaTime類庫。
但是在Java8推出之後,我們就可以徹底放棄JodaTime了,因為Java 8提供了其所有功能。但是,如果你的程式碼執行在一個低版本的JDK中,那麼JodaTime還是值得使用的。
十三、集合類庫
雖然JDK有豐富的集合類,但還是有很多第三方類庫可以提供更多更好的功能。如Apache Commons Collections、 Goldman Sachs collections、 Google Collections和 Trove。Trove尤其有用,因為它提供所有標準Collections 類的更快的版本以及能夠直接在原語(primitive)(例如包含int 鍵或值的Map 等)上操作的Collections 類的功能。
FastUtil是另一個類似的API,它繼承了Java Collection Framework,提供了數種特定型別的容器,包括對映map、集合set、串列list、優先順序佇列(prority queue),實現了java.util包的標準介面(還提供了標準類所沒有的雙向迭代器),還提供了很大的(64位)的array、set、list,以及快速、實用的二進位制或文字檔案的I/O操作類。
十四、郵件API
javax.mail 和 Apache Commons Email 提供了傳送郵件的api。它們建立在JavaMail API的基礎上,提供簡化的用法。
十五、HTML解析庫
和XML與JSON類似,HTML是另外一種我們可能要打交道的傳輸格式。值得慶幸的是,我們有jsoup可以大大簡化Java應用程式使用HTML。你不僅可以使用JSoup解析HTML還可以建立HTML檔案。
十六、加密庫
Apache Commons家族中的Commons Codec就提供了一些公共的編解碼實現,比如Base64, Hex, MD5,Phonetic and URLs等等。
十七、嵌入式SQL資料庫庫
我真的是非常喜歡像H2這種記憶體資料庫,他可以嵌入到你的Java應用中。在你跑單測的時候如果你需要一個資料庫,用來驗證你的SQL的話,他是個很好的選擇。順便說一句,H2不是唯一嵌入式DB,你還有Apache Derby和HSQL可供選擇。
十八、JDBC故障診斷庫
有不錯的JDBC擴充套件庫的存在使得除錯變得很容易,例如P6spy,這是一個針對資料庫訪問操作的動態監測框架,它使得資料庫資料可無縫擷取和操縱,而不必對現有應用程式的程式碼作任何修改。P6Spy 分發包包括P6Log,它是一個可記錄任何 Java 應用程式的所有JDBC事務的應用程式。其配置完成使用時,可以進行資料訪問效能的監測。
十九、序列化庫
Google Protocol Buffer 是一種輕便高效的結構化資料儲存格式,可以用於結構化資料序列化,或者說序列化。它很適合做資料儲存或 RPC 資料交換格式。可用於通訊協議、資料儲存等領域的語言無關、平臺無關、可擴充套件的序列化結構資料格式。目前提供了 C++、Java、Python 三種語言的 API。
二十、網路庫
一些有用的網路庫主要有Netty的和Apache MINA。如果您正在編寫一個應用程式,你需要做的底層網路任務,可以考慮使用這些庫。
這都是每位Java開發人員應該熟悉的,並且十分有用的庫。Java生態系統非常龐大的,你會發現有很多不同的類庫可以做不同的事情。每個你想到的東西,都可能有一個庫可以做到。
要相信,你遇到的問題,肯定不止你一個遇到過。
要相信,也許有很多人比你更勤奮。
要相信,你用或不用,輪子就在那裡。
要相信,使用這些類庫,你和你的程式碼都會變得更好。