本文總結了日誌、JSON解析、單測、XML解析、字節碼處理、數據庫鏈接池、集合類、郵件、加密、嵌入式SQL數據庫、JDBC故障診斷以及序列化等20個方面的經常使用類庫。都是你平常開發常常可能要用到的,如今不用沒關係,可是你要知道有這麼一篇文章能夠供你參考。java
一個有經驗的Java開發人員特徵之一就是善於使用已有的輪子來造車。《Effective Java》的做者Joshua Bloch曾經說過:「建議使用現有的API來開發,而不是重複造輪子」。在本文中,我將分享一些Java開發人員應該熟悉的最有用的和必要的庫和API。順便說一句,這裏不包括框架,如Spring和Hibernate由於他們很是有名,都有特定的功能。程序員
本文總結了日誌、JSON解析、單測、XML解析、字節碼處理、數據庫鏈接池、集合類、郵件、加密、嵌入式SQL數據庫、JDBC故障診斷以及序列化等20個方面的經常使用類庫。都是你平常開發常常可能要用到的,如今不用沒關係,可是你要知道有這麼一篇文章能夠供你參考。web
不知道不可怕,可怕的是你不知道你不知道。數據庫
1、日誌相關類庫api
日誌庫是很常見的,由於你在每個項目中都須要他們。打印日誌是服務器端應用中最重要的事情,由於日誌是你瞭解你的程序發生了什麼的惟一途徑。儘管JDK附帶本身的日誌庫,可是仍是有不少更好的選擇可用,例如 Log4j 、 SLF4j 和 LogBack。安全
Java開發人員應該熟悉日誌記錄的利弊, 而且瞭解爲何SLF4J要比Log4J要好。服務器
2、JSON解析庫網絡
在當今世界的web服務和物聯網中(IoT),JSON已經取代了XML,成爲從客戶端到服務器傳送信息的首選協議。有一個好消息和一個壞消息。壞消息 是JDK沒有提供JSON庫。好消息是有許多優秀的第三方庫能夠用來解析和建立JSON消息,如 Jackson 和 Gson框架
一個Java web開發人員應該熟悉Jackson 和 Gson這兩種中的至少一種庫。模塊化
3、單元測試庫
單元測試技術的使用,是區分一個通常的開發者和好的開發者的重要指標。程序員常常有各類藉口不寫單元測試,但最多見的藉口就是缺少經驗和知識。常見的單測框架有 JUnit , Mockito 和PowerMock 。
4、通用類庫
有幾個很好的第三方通用庫可供Java開發人員使用,例如 Apache Commons 和 Google Guava 。我會常常在個人代碼中使用這些通用類庫,由於這些類庫都是通過無數開發者實踐過的,不管是實用性仍是在性能等方面都是最佳的。
5、Http 庫
我不是很喜歡JDK的一個重要緣由就包括他們缺少對HTTP的支持。雖然可使用java.net包類,可是這和直接使用像 Apache HttpClient 和 HttpCore 等開源類庫比起來麻煩太多了。
儘管JDK 9將開始HTTP 2.0,也對HTTP的支持作了優化,可是我仍是強烈建議全部的Java開發人員熟悉流行的HTTP處理類庫,例如HttpClient和HttpCore HTTP等庫。
6、XML解析庫
市面上有不少XML解析的類庫,如 Xerces , JAXB , JAXP , Dom4j , Xstream 等。 Xerces2是下一代高性能,徹底兼容的XML解析工具。Xerces2定義了 Xerces Native Interface (XNI)規範,並提供了一個完整、兼容標準的 XNI 規範實現。該解析器是徹底從新設計和實現的,更簡單以及模塊化。
7、Excel讀寫庫
許多應用程序須要提供把數據導出到Excel的功能,若是你要作相同的Java應用程序,那麼你須要 Apache POI API 。
這是一個很是豐富的類庫,你能夠從Java程序讀寫XLS文件。
8、字節碼庫
若是你正在編寫一個框架或者類庫。有一些受歡迎的字節碼庫如 javassist 和 Cglib Nodep 能夠供你選擇,他們可讓你閱讀和修改應用程序生成的字節碼。
Javassist使得JAVA字節碼操做很是簡單。它是一個爲編輯Java字節碼而生的類庫。 ASM 是另外一個有用的字節碼編輯庫。
9、數據庫鏈接池庫
若是你的Java應用程序與數據庫交互不是使用數據庫鏈接池庫的話,那麼你就大錯特錯了。由於在運行時建立數據庫鏈接很是耗時而且會拖慢你的程序。因此牆裂建議使用,有些好用的鏈接池可供選擇,如 Commons Pool 和 DBCP 。
在web應用程序中,web服務器一般提供了這些功能。可是在java項目中須要把數據庫鏈接池的類庫導入到應用中。
10、消息傳遞庫
像日誌和數據庫鏈接池同樣,消息傳遞也是不少實際的Java項目中必備的。Java提供了JMS Java消息服務,但這不是JDK的一部分,你須要單獨的引入jms.jar。相似地,若是您準備使用第三方消息傳遞協議, Tibco RV 是個不錯的選擇。
11、PDF處理庫
除了Excel和Word,PDF也是一種經常使用的文件格式。若是你的應用程序要支持PDF格式的文件處理,你可使用 iText 和 Apache FOP 類庫。二者都提供了很是有用的PDF處理功能。
12、日期和時間庫
在Java以前,JDK的日期和時間庫一直被人們所詬病,好比其非線程安全的、不可變的、容易出錯等。不少開發人員會選擇更好用的 JodaTime 類庫。
可是在Java8推出以後,咱們就能夠完全放棄JodaTime了,由於Java 8提供了其全部功能。可是,若是你的代碼運行在一個低版本的JDK中,那麼JodaTime仍是值得使用的。
十3、集合類庫
雖然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操做類。
十4、郵件API
javax.mail 和 Apache Commons Email 提供了發送郵件的api。它們創建在JavaMail API的基礎上,提供簡化的用法。
十5、HTML解析庫
和XML與JSON相似,HTML是另一種咱們可能要打交道的傳輸格式。值得慶幸的是,咱們有jsoup能夠大大簡化Java應用程序使用HTML。你不只可使用 JSoup 解析HTML還能夠建立HTML文檔。
十6、加密庫
Apache Commons家族中的 Commons Codec 就提供了一些公共的編解碼實現,好比Base64, Hex, MD5,Phonetic and URLs等等。
十7、嵌入式SQL數據庫庫
我真的是很是喜歡像 H2 這種內存數據庫,他能夠嵌入到你的Java應用中。在你跑單測的時候若是你須要一個數據庫,用來驗證你的SQL的話,他是個很好的選擇。順便說一句,H2不是惟一嵌入式DB,你還有 Apache Derby 和 HSQL 可供選擇。
十8、JDBC故障診斷庫
有不錯的JDBC擴展庫的存在使得調試變得很容易,例如P6spy,這是一個針對數據庫訪問操做的動態監測框架,它使得數據庫數據可無縫截取和操縱,而沒必要對現有應用程序的代碼做任何修改。 P6Spy 分發包包括P6Log,它是一個可記錄任何 Java 應用程序的全部JDBC事務的應用程序。其配置完成使用時,能夠進行數據訪問性能的監測。
十9、序列化庫
Google Protocol Buffer是一種輕便高效的結構化數據存儲格式,能夠用於結構化數據串行化,或者說序列化。它很適合作數據存儲或 RPC 數據交換格式。可用於通信協議、數據存儲等領域的語言無關、平臺無關、可擴展的序列化結構數據格式。目前提供了 C++、Java、Python 三種語言的 API。
二10、網絡庫
一些有用的網絡庫主要有 Netty 的和 Apache MINA 。若是您正在編寫一個應用程序,你須要作的底層網絡任務,能夠考慮使用這些庫。