優秀Java程序員應該知道的20個實用開源庫

一個優秀且經驗豐富的Java開發人員的特色之一是對API的普遍瞭解,包括JDK和第三方庫。我花了不少時間學習API,特別是在閱讀Effective Java 3rd Edition以後,Joshua Bloch建議如何使用現有的API進行開發,而不是爲經常使用的東西寫新的代碼。html

在本文中,我將分享一些Java開發人員應該熟悉的最有用和最重要的庫和API。可是,我沒有包含框架,例如Spring和Hibernate,由於它們很是有名且具備特定功能。java

總的來講,我在平常項目包含了有用的庫,包括Log4j日誌庫,Jackson JSON解析庫,以及JUnit和Mockito等單元測試API。若是須要在項目中使用,則在項目的classpath包含這些JAR,也可使用Maven進行依賴管理。jquery

當你使用Maven進行依賴管理時,它會自動下載這些庫,包括它們所依賴的庫,稱爲傳遞依賴。程序員

例如,若是你下載Spring Framework,它還將下載Spring所依賴的全部其餘JAR,例如Log4j。數據庫

你可能沒注意到,但有正確版本的JAR是一個使人頭疼的問題。若是是錯誤的JAR版本,那麼你將遇到 ClassNotFoundException, NoClassDefFoundError或 UnsupportedClassVersionError。apache

這是我收集的一些有用的第三方庫,Java開發可使用它們在應用中來完成許多有用的功能。要使用這些庫,Java開發人員應該熟悉它,這就是本文的重點。若是你以爲有用,你能夠研究該庫並使用它。編程

1.日誌庫
日誌庫很是常見,由於在每一個項目中都須要它們。它們是服務器端應用最重要的東西,由於日誌只放在能夠看到應用程序當前運行時狀況的地方。儘管JDK附帶了本身的日誌庫,但還有更好的替代方案,例如Log4j,SLF4j和LogBack。數組

clipboard.png

Java開發人員應該熟悉日誌庫的優缺點,而且知道 爲何使用SLF4j比普通Log4j更好瀏覽器

2.JSON解析庫在當今的Web服務和物聯網領域,JSON已成爲將信息從客戶端傳送到服務器的首選協議。他們已經替換XML成爲在獨立平臺間傳輸信息的最佳方式。安全

遺憾的是,JDK沒有JSON庫。可是,有許多優秀的第三方庫容許你解析和建立JSON消息,如Jackson和Gson。

Java Web開發人員應該熟悉這些庫中的至少一個。若是你想了解有關Jackson和JSON的更多信息,我建議你看看 Udemy的課程JSON with the Java API。

3.單元測試庫
單元測試是將普通開發人員與優秀開發人員區分開來的最重要的事情。程序員常常有理由不寫單元測試,但逃避寫單元測試的最多見的藉口是缺少經常使用單元測試庫的經驗和知識,包括JUnit,Mockito和PowerMock。

clipboard.png
我在2018年有一個目標就是提升我對單元測試和集成測試庫的瞭解,好比JUnit 5,Cucumber,Robot框架和一些其餘的。

我還在Udemy註冊了 JUnit and Mockito Crash Course 。即便你瞭解JUnit和單元測試的基礎知識,可能也但願更新並進階本身的知識。

4.通用庫
Java開發人員可使用幾個很好的通用第三方庫,好比Apache Commons和Google Guava。我老是在個人項目中包含這些庫,由於它們簡化了不少功能。

正如Joshua Bloch在Effective Java中所說的那樣,重複造輪子是沒有意義的。咱們應該更偏向於使用久經考驗的庫而不是時不時本身來實現。

clipboard.png
對Java開發人員來講,熟悉Google Guava和Apache Commons庫是件好事。

5.HTTP庫
我不喜歡JDK的一點是他們對HTTP支持的缺少。雖然你可使用java.net包中的類創建HTTP鏈接 ,但使用開源的第三方庫(如Apache HttpClient和HttpCore)並不容易或不能無縫結合。

雖然JDK 9帶來了HTTP 2.0的支持和更好的HTTP支持,但我強烈建議全部Java開發人員熟悉流行的HTTP客戶端庫,包括HttpClient和HttpCore。

你還能夠查看此文章What's New in Java 9 - Modules and More以瞭解有關JDK 9對HTTP 2支持的更多信息。

clipboard.png
6.XML解析庫
有許多XML解析庫,包括Xerces,JAXB,JAXP,Dom4j和Xstream。Xerces2是Apache Xerces下一高性能版本,徹底兼容的XML解析器。這個新版本的Xerces引入了Xerces Native Interface(XNI),這是一個完整的框架,用於構建很是模塊化且易於編程的解析器組件和配置。

clipboard.png
Apache Xerces2解析器是XNI的參考實現,可是其餘解析器組件,配置和解析器可使用Xerces Native Interface編寫。Dom4j是另外一個適用於Java應用程序的靈活XML框架。若是你想了解有關Java中XML解析的更多信息,建議你查看Udemy 上的 Java Web Services and XML 在線課程。

7.Excel庫
信不信由你 - 全部現實世界的應用程序都必須以某種形式與Microsoft Office進行交互。許多應用程序須要提供在Excel中導出數據的功能,若是必須從Java應用程序執行相同操做,則須要Apache POI API。

clipboard.png

這是一個很是豐富的庫,容許你 從Java程序讀取和寫入XLS文件。你能夠看到該連接(http://www.java67.com/2014/09...),以獲取在覈心Java應用程序中讀取Excel文件的工做示例。

8.字節碼庫
若是你正在編寫生成代碼或與字節碼交互的框架,那麼你須要一個字節碼庫。

它們容許你讀取和修改應用程序生成的字節碼。Java世界中一些流行的字節碼庫是javassist和Cglib Nodep。

clipboard.png

Javassist(Java programming assistant)使Java字節碼操做變得很是簡單。它是一個用於在Java中編輯字節碼的類庫。ASM是另外一個有用的字節碼編輯庫。若是你不熟悉字節碼,我建議你查看Introduction to Java Programmers以瞭解有關它的更多信息。

9.數據庫鏈接池庫
若是你正在從Java應用程序與數據庫交互但不使用數據庫鏈接池庫,那麼你將丟失一些內容。

因爲在運行時建立數據庫鏈接須要花費時間並使請求處理速度變慢,所以始終建議使用數據庫鏈接庫。一些流行的是Commons Pool和DBCP。

在Web應用程序中,它的Web服務器一般提供這些功能,但在覈心Java應用程序中,你須要將這些鏈接池庫包含在類路徑中以使用數據庫鏈接池。

若是你想了解有關JDBC和Web應用程序中的鏈接池的更多信息,我建議你查看Udemy 中的JSP, Servlet, and JDBC for Beginners課程。

10.消息傳遞庫
與日誌記錄和數據庫鏈接相似,消息傳遞也是許多現實世界Java應用程序的常見功能。

Java提供的JMS,Java Messaging Service不屬於JDK。對於此組件,你須要包含一個單獨的組件 jms.jar。

一樣,若是你正在使用第三方消息傳遞協議(如Tibco RV),則須要使用第三方JAR tibrv.jar 放在應用程序類路徑中。

clipboard.png

  1. PDF庫

與Microsoft Excel相似,PDF庫是另外一種廣泛存在的格式。若是你須要在應用程序中支持PDF功能,例如 導出數據到PDF文件,則可使用iText和Apache FOP庫。

二者都提供有用的PDF相關功能,但iText更豐富,更好。請參閱此處以瞭解有關iText的更多信息。

clipboard.png

12.日期和時間庫
在Java 8以前,JDK的數據和時間庫有不少缺陷,由於它們不是線程安全的,不可變的,而且容易出錯。許多Java開發人員依靠JodaTime來實現他們的日期和時間要求。

從JDK 8開始,沒有理由使用Joda,由於你在JDK 8的新日期和時間API中得到了全部功能,但若是你使用的是較舊的Java版本,那麼JodaTime是一個值得學習的庫。

若是你想了解有關新的日期和時間API的更多信息,我建議你查看Udemy上的What's new in Java 8課程。它提供了Java 8全部重要功能的精彩概述,包括日期和時間API。

clipboard.png

13.Collection庫
儘管JDK擁有豐富的集合庫,但仍有一些第三方庫提供了更多選項,例如Apache Commons集合,Goldman Sachs集合,Google集合和Trove。

Trove庫特別有用,由於它爲Java提供了高速的常規和原始集合。

clipboard.png

FastUtil是另外一個相似的API。它經過提供特定類型的映射,集合,列表和優先級隊列來擴展Java集合框架,較小的內存佔用,快速訪問和插入; 它還提供大型(64位)數組,集和列表,以及用於二進制和文本文件快速實用的I / O類。

14.Email API
javax.mail和Apache Commons Email都提供了一個用於從Java發送電子郵件的API 。它創建在JavaMail API的基礎之上,旨在簡化它。

clipboard.png

  1. HTML解析庫

與JSON和XML相似,HMTL是咱們許多人必須處理的另外一種常見格式。值得慶幸的是,咱們有JSoup,它極大地簡化了在Java應用程序中使用HTML的過程。

你不只可使用JSoup解析HTML,還能夠建立HTML文檔

clipboard.png

它提供了一個很是方便的API,用於提取和操做數據,使用DOM,CSS和相似jquery的方法。JSoup實現了WHATWG HTML5規範,並將HTML解析到同一個DOM,就像現代瀏覽器同樣。

16.Cryptographic庫
Apache Commons Codec軟件包包含各類格式的簡單編碼器和解碼器,如Base64和Hexadecimal。

除了這些普遍使用的編碼器和解碼器以外,編解碼器包還維護一組語音編碼實用程序。

clipboard.png

17.Embedded SQL Database庫
我真的很喜歡像H2這樣的內存數據庫,你能夠將它嵌入你的Java應用程序中。它們很是適合測試SQL腳本和運行須要數據庫的單元測試。可是,H2並非惟一的DB,你也能夠選擇Apache Derby和HSQL。

clipboard.png

  1. JDBC問題排查庫

存在一些很好的JDBC擴展庫,可使調試更容易,好比P6spy。

這是一個庫,能夠無縫地攔截和記錄數據庫數據,而無需對應用程序進行代碼更改。你可使用它們來記錄SQL查詢及其計時。

例如,若是你在代碼中使用PreparedStatment和CallableStatement,則這些庫能夠記錄一次徹底調用的參數和執行所花費的時間。

clipboard.png

若是你想了解有關JDBC的更多信息,能夠查看JDBC for Beginners。

19.序列化庫
Google Protocol Buffers是一種以高效可擴展的格式編碼結構化數據的方法。它是Java序列化的更豐富,更好的替代品。我強烈建議有經驗的Java開發人員學習Google Protobuf。你能夠查看此文章以瞭解有關Google協議緩衝區的更多信息 。

clipboard.png

20.網絡庫
一些有用的網絡庫是Netty和Apache MINA。若是你正在編寫須要執行底層網絡任務的應用程序,請考慮使用這些庫。若是你想了解有關Java網絡編程的更多信息,請查看 Java Network Programming - TCP/IP Socket Programming。

clipboard.png

這些就是對於每一個Java開發人員都應該使用的一些有用的庫。Java的世界是浩瀚無窮的,你會發現數不勝數的庫用於作不一樣的事情。

若是你想用Java作任何事情,極可能你會找到一個如何實現的庫。與往常同樣,Google是你找到有用的Java庫的最好朋友,但你也能夠查看Maven中央存儲庫,找到適合你手頭任務的一些有用的庫。

相關文章
相關標籤/搜索