一個優秀且經驗豐富的Java開發人員的特點之一是對API的廣泛瞭解,包括JDK和第三方庫。我花了很多時間學習API,特別是在閱讀Effective Java 3rd Edition之後,Joshua Bloch建議如何使用現有的API進行開發,而不是為常用的東西寫新的程式碼。
在本文中,我將分享一些Java開發人員應該熟悉的最有用和最重要的庫和API。但是,我沒有包含框架,例如Spring和Hibernate,因為它們非常有名且具有特定功能。
總的來說,我在日常專案包含了有用的庫,包括Log4j日誌庫,Jackson JSON解析庫,以及JUnit和Mockito等單元測試API。如果需要在專案中使用,則在專案的classpath包含這些JAR,也可以使用Maven進行依賴管理。
當你使用Maven進行依賴管理時,它會自動下載這些庫,包括它們所依賴的庫,稱為傳遞依賴。
例如,如果你下載Spring Framework,它還將下載Spring所依賴的所有其他JAR,例如Log4j。
你可能沒注意到,但有正確版本的JAR是一個令人頭疼的問題。如果是錯誤的JAR版本,那麼你將遇到 ClassNotFoundException, NoClassDefFoundError或 UnsupportedClassVersionError。
Java程式設計師20個有用的開源庫
這是我收集的一些有用的第三方庫,Java開發可以使用它們在應用中來完成許多有用的功能。要使用這些庫,Java開發人員應該熟悉它,這就是本文的重點。如果你覺得有用,你可以研究該庫並使用它。
1.日誌庫
日誌庫非常常見,因為在每個專案中都需要它們。它們是伺服器端應用最重要的東西,因為日誌只放在可以看到應用程式當前執行時情況的地方。儘管JDK附帶了自己的日誌庫,但還有更好的替代方案,例如Log4j,SLF4j和LogBack。
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。
我在2018年有一個目標就是提高我對單元測試和整合測試庫的瞭解,比如JUnit 5,Cucumber,Robot框架和一些其他的。
我還在Udemy註冊了 JUnit and Mockito Crash Course 。即使你瞭解JUnit和單元測試的基礎知識,可能也希望更新並進階自己的知識。
4.通用庫
Java開發人員可以使用幾個很好的通用第三方庫,比如Apache Commons和Google Guava。我總是在我的專案中包含這些庫,因為它們簡化了很多功能。
正如Joshua Bloch在Effective Java中所說的那樣,重複造輪子是沒有意義的。我們應該更偏向於使用久經考驗的庫而不是時不時自己來實現。
對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支援的更多資訊。
6. XML解析庫
有許多XML解析庫,包括Xerces,JAXB,JAXP,Dom4j和Xstream。Xerces2是Apache Xerces下一高效能版本,完全相容的XML解析器。這個新版本的Xerces引入了Xerces Native Interface(XNI),這是一個完整的框架,用於構建非常模組化且易於程式設計的解析器元件和配置。
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。
這是一個非常豐富的庫,允許你 從Java程式讀取和寫入XLS檔案。你可以看到該連結(http://www.java67.com/2014/09/how-to-read-write-xlsx-file-in-java-apache-poi-example.html),以獲取在核心Java應用程式中讀取Excel檔案的工作示例。
8.位元組碼庫
如果你正在編寫生成程式碼或與位元組碼互動的框架,那麼你需要一個位元組碼庫。
它們允許你讀取和修改應用程式生成的位元組碼。Java世界中一些流行的位元組碼庫是javassist和Cglib Nodep。
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 放在應用程式類路徑中。
11. PDF庫
與Microsoft Excel類似,PDF庫是另一種普遍存在的格式。如果你需要在應用程式中支援PDF功能,例如 匯出資料到PDF檔案,則可以使用iText和Apache FOP庫。
兩者都提供有用的PDF相關功能,但iText更豐富,更好。請參閱此處以瞭解有關iText的更多資訊。
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。
13.Collection庫
儘管JDK擁有豐富的集合庫,但仍有一些第三方庫提供了更多選項,例如Apache Commons集合,Goldman Sachs集合,Google集合和Trove。
Trove庫特別有用,因為它為Java提供了高速的常規和原始集合。
FastUtil是另一個類似的API。它通過提供特定型別的對映,集合,列表和優先順序佇列來擴充套件Java集合框架,較小的記憶體佔用,快速訪問和插入; 它還提供大型(64位)陣列,集和列表,以及用於二進位制和文字檔案快速實用的I / O類。
14.Email API
javax.mail和Apache Commons Email都提供了一個用於從Java傳送電子郵件的API 。它建立在JavaMail API的基礎之上,旨在簡化它。
15. HTML解析庫
與JSON和XML類似,HMTL是我們許多人必須處理的另一種常見格式。值得慶幸的是,我們有JSoup,它極大地簡化了在Java應用程式中使用HTML的過程。
你不僅可以使用JSoup解析HTML,還可以建立HTML文件
它提供了一個非常方便的API,用於提取和運算元據,使用DOM,CSS和類似jquery的方法。JSoup實現了WHATWG HTML5規範,並將HTML解析到同一個DOM,就像現代瀏覽器一樣。
16.Cryptographic庫
Apache Commons Codec軟體包包含各種格式的簡單編碼器和解碼器,如Base64和Hexadecimal。
除了這些廣泛使用的編碼器和解碼器之外,編解碼器包還維護一組語音編碼實用程式。
17.Embedded SQL Database庫
我真的很喜歡像H2這樣的記憶體資料庫,你可以將它嵌入你的Java應用程式中。它們非常適合測試SQL指令碼和執行需要資料庫的單元測試。但是,H2並不是唯一的DB,你也可以選擇Apache Derby和HSQL。
18. JDBC問題排查庫
存在一些很好的JDBC擴充套件庫,可以使除錯更容易,比如P6spy。
這是一個庫,可以無縫地攔截和記錄資料庫資料,而無需對應用程式進行程式碼更改。你可以使用它們來記錄SQL查詢及其計時。
例如,如果你在程式碼中使用PreparedStatment和CallableStatement,則這些庫可以記錄一次完全呼叫的引數和執行所花費的時間。
如果你想了解有關JDBC的更多資訊,可以檢視JDBC for Beginners。
19.序列化庫
Google Protocol Buffers是一種以高效可擴充套件的格式編碼結構化資料的方法。它是Java序列化的更豐富,更好的替代品。我強烈建議有經驗的Java開發人員學習Google Protobuf。你可以檢視此文章以瞭解有關Google協議緩衝區的更多資訊 。
20.網路庫
一些有用的網路庫是Netty和Apache MINA。如果你正在編寫需要執行底層網路任務的應用程式,請考慮使用這些庫。如果你想了解有關Java網路程式設計的更多資訊,請檢視 Java Network Programming - TCP/IP Socket Programming。
這些就是對於每個Java開發人員都應該使用的一些有用的庫。Java的世界是浩瀚無窮的,你會發現數不勝數的庫用於做不同的事情。
如果你想用Java做任何事情,很可能你會找到一個如何實現的庫。與往常一樣,Google是你找到有用的Java庫的最好朋友,但你也可以檢視Maven中央儲存庫,找到適合你手頭任務的一些有用的庫。
更多文章歡迎訪問: http://www.apexyun.com
公眾號:銀河系1號
聯絡郵箱:public@space-explore.com
(未經同意,請勿轉載)