優(yōu)秀且經(jīng)驗豐富的Java開發(fā)人員的一個特點是API的廣泛知識,包括JDK和第三方庫。我花了很多時間學(xué)習(xí)API,特別是在閱讀Effective Java 3rd Edition之后,Joshua Bloch建議如何使用現(xiàn)有的API進行開發(fā),而不是為常見的東西編寫新的代碼片段。
由于第二方庫獲得的測試曝光,這個建議對我有意義。在本文中,我將分享一些Java開發(fā)人員應(yīng)該熟悉的最有用和最重要的庫和API。但是,我沒有包含框架,例如Spring和Hibernate,因為它們非常有名且具有特定功能。
總的來說,我為日常項目提供了有用的庫,包括Log4j等日志庫,Jackson等JSON解析庫,以及JUnit和Mockito等單元測試API。如果需要在項目中使用它們,則可以在項目的類路徑中包含這些庫的JAR以開始使用它們,也可以使用Maven進行依賴項管理。
當(dāng)您使用Maven進行依賴關(guān)系管理時,它會自動下載這些庫,包括它們所依賴的庫,稱為傳遞依賴。
例如,如果您下載Spring Framework,它還將下載Spring所依賴的所有其他JAR,例如Log4j。
您可能沒有意識到,但擁有正確版本的依賴JAR是一個令人頭疼的問題。如果您有錯誤的JAR版本,那么您將獲得? ClassNotFoundException,? NoClassDefFoundError或? UnsupportedClassVersionError。
20個適用于Java程序員的有用開源庫
這是我的一些有用的第三方庫的集合,Java開發(fā)人員可以在他們的應(yīng)用程序中使用它們來完成許多有用的任務(wù)。為了使用這些庫,Java開發(fā)人員應(yīng)該熟悉它,這就是本文的重點。如果您有想法,那么您可以研究該庫并使用它。
1.記錄庫
記錄庫非常常見,因為在每個項目中都需要它們。它們是服務(wù)器端應(yīng)用程序最重要的事情,因為日志只放在您可以看到應(yīng)用程序正在發(fā)生的事情的位置。盡管JDK附帶了自己的日志庫,但還有更好的替代方案,例如Log4j,SLF4j和LogBack。
Java開發(fā)人員應(yīng)該熟悉日志庫的優(yōu)缺點,并且知道? 為什么使用SLF4j比普通Log4j更好。如果你不知道為什么,我建議你閱讀我之前關(guān)于同一主題的文章。
2. JSON解析庫
在當(dāng)今的Web服務(wù)和物聯(lián)網(wǎng)領(lǐng)域,JSON已成為將信息從客戶端傳送到服務(wù)器的首選協(xié)議。他們已經(jīng)將XML替換為以獨立于平臺的方式傳輸信息的最佳方式。
不幸的是,JDK沒有JSON庫。但是,有許多優(yōu)秀的第三方庫允許您解析和創(chuàng)建JSON消息,如Jackson和Gson。
Java Web開發(fā)人員應(yīng)該熟悉這些庫中的至少一個。如果您想了解有關(guān)Jackson和JSON的更多信息,我建議您使用 Udemy 的Java API課程學(xué)習(xí)JSON。
3.單元測試庫
單元測試是將普通開發(fā)人員與優(yōu)秀開發(fā)人員區(qū)分開來的最重要的事情。程序員經(jīng)常被給予不寫單元測試的借口,但避免單元測試的最常見的借口是缺乏流行的單元測試庫的經(jīng)驗和知識,包括JUnit,Mockito和PowerMock。
我在2018年有一個目標(biāo)是提高我對單元測試和集成測試庫的了解,比如JUnit 5,Cucumber,Robot框架和其他一些。
我還在Udemy注冊了? JUnit和Mockito Crash Course? 。即使您了解JUnit和單元測試的基礎(chǔ)知識,您也可能希望刷新并升級自己的知識。
4.通用圖書館
Java開發(fā)人員可以使用幾個很好的通用第三方庫,比如Apache Commons和Google Guava。我總是在我的項目中包含這些庫,因為它們簡化了很多任務(wù)。
正如Joshua Bloch在Effective Java中所說的那樣,重新發(fā)明車輪是沒有意義的。我們應(yīng)該更喜歡使用久經(jīng)考驗的庫而不是偶爾編寫我們自己的例程。
對Java開發(fā)人員來說,熟悉Google Guava和Apache Commons庫是件好事。
5. HTTP庫
我不喜歡JDK的一件事是他們?nèi)狈TTP的支持。雖然您可以使用java.net包中的類建立HTTP連接? ,但使用開源的第三方庫(如Apache HttpClient和HttpCore)并不容易或無縫。
雖然JDK 9帶來了HTTP 2.0的支持和更好的HTTP支持,但我強烈建議所有Java開發(fā)人員熟悉流行的HTTP客戶端庫,包括HttpClient和HttpCore。
您還可以查看此文章? Java 9中的新功能 - 模塊和更多內(nèi)容,以了解有關(guān)JDK 9的HTTP 2支持的更多信息。
6. XML解析庫
有許多XML解析庫,包括Xerces,JAXB,JAXP,Dom4j和Xstream。Xerces2是Apache Xerces系列中的下一代高性能,完全兼容的XML解析器。這個新版本的Xerces引入了Xerces Native Interface(XNI),這是一個完整的框架,用于構(gòu)建非常模塊化且易于編程的解析器組件和配置。
Apache Xerces2解析器是XNI的參考實現(xiàn),但是其他解析器組件,配置和解析器可以使用Xerces Native Interface編寫。Dom4j是另一個適用于Java應(yīng)用程序的靈活XML框架。如果您想了解有關(guān)Java中XML解析的更多信息,建議您查看Udemy 上的? Java Web Services和XML在線課程。
7. Excel閱讀圖書館
信不信由你 - 所有真實世界的應(yīng)用程序都必須以某種形式與Microsoft Office進行交互。許多應(yīng)用程序需要提供在Excel中導(dǎo)出數(shù)據(jù)的功能,如果必須從Java應(yīng)用程序執(zhí)行相同操作,則需要Apache POI API。
這是一個非常豐富的庫,允許您? 從Java程序讀取和寫入XLS文件。您可以看到該鏈接,以獲取在核心Java應(yīng)用程序中讀取Excel文件的工作示例。
8.字節(jié)碼庫
如果您正在編寫生成代碼或與字節(jié)碼交互的框架,那么您需要一個字節(jié)碼庫。
它們允許您讀取和修改應(yīng)用程序生成的字節(jié)碼。Java世界中一些流行的字節(jié)碼庫是javassist和Cglib Nodep。
Javassist(JAVA編程ASSISTant)使Java字節(jié)碼操作變得非常簡單。它是一個用于在Java中編輯字節(jié)碼的類庫。ASM是另一個有用的字節(jié)碼編輯庫。如果您不熟悉字節(jié)碼,我建議您查看? Java程序員簡介以了解有關(guān)它的更多信息。
9.數(shù)據(jù)庫連接池庫
如果您正在從Java應(yīng)用程序與數(shù)據(jù)庫交互但不使用數(shù)據(jù)庫連接池庫,那么您將丟失一些內(nèi)容。
由于在運行時創(chuàng)建數(shù)據(jù)庫連接需要花費時間并使請求處理速度變慢,因此始終建議使用數(shù)據(jù)庫連接庫。一些流行的是Commons Pool和DBCP。
在Web應(yīng)用程序中,它的Web服務(wù)器通常提供這些功能,但在核心Java應(yīng)用程序中,您需要將這些連接池庫包含在類路徑中以使用數(shù)據(jù)庫連接池。
如果您想了解有關(guān)JDBC和Web應(yīng)用程序中的連接池的更多信息,我建議您查看Udemy 中的? JSP,Servlet和JDBC for Beginners課程。
10.消息傳遞庫
與日志記錄和數(shù)據(jù)庫連接類似,消息傳遞也是許多真實Java應(yīng)用程序的常見功能。
Java提供的JMS或Java Messaging Service不屬于JDK。對于此組件,您需要包含一個單獨的組件? jms.jar。
同樣,如果您正在使用第三方消息傳遞協(xié)議(如Tibco RV),則需要tibrv.jar 在應(yīng)用程序類路徑中使用第三方JAR? 。
?
11. PDF圖書館
與Microsoft Excel類似,PDF庫是另一種無處不在的格式。如果您需要在應(yīng)用程序中支持PDF功能,例如? 導(dǎo)出PDF文件中的數(shù)據(jù),則可以使用iText和Apache FOP庫。
兩者都提供有用的PDF相關(guān)功能,但iText更豐富,更好。請參閱此處以了解有關(guān)iText的更多信息。
12.日期和時間庫
在Java 8之前,JDK的數(shù)據(jù)和時間庫有很多缺陷,因為它們不是線程安全的,不可變的,并且容易出錯。許多Java開發(fā)人員依靠JodaTime來實現(xiàn)他們的日期和時間要求。
從JDK 8開始,沒有理由使用Joda,因為您在JDK 8的新日期和時間API中獲得了所有功能,但如果您使用的是較舊的Java版本,那么JodaTime是一個值得學(xué)習(xí)的庫。
如果您想了解有關(guān)新的日期和時間API的更多信息,我建議您查看Udemy上的Java 8新課程。它提供了Java 8所有重要功能的精彩概述,包括日期和時間API。
?
13.館藏圖書館
盡管JDK擁有豐富的集合庫,但仍有一些第三方庫提供了更多選項,例如Apache Commons集合,Goldman Sachs集合,Google集合和Trove。
Trove庫特別有用,因為它為Java提供了高速的常規(guī)和原始集合。
FastUtil是另一個類似的API。它通過提供特定于類型的映射,集合,列表和優(yōu)先級隊列來擴展Java集合框架,具有較小的內(nèi)存占用,快速訪問和插入; 它還提供大型(64位)數(shù)組,集和列表,以及用于二進制和文本文件的快速實用的I / O類。
14.電子郵件API
javax.mail和Apache Commons Email都提供了一個用于從Java發(fā)送電子郵件的API 。它建立在JavaMail API的基礎(chǔ)之上,旨在簡化它。
?
15. HTML解析庫
與JSON和XML類似,HMTL是我們許多人必須處理的另一種常見格式。值得慶幸的是,我們有JSoup,它極大地簡化了在Java應(yīng)用程序中使用HTML的過程。
您可以使用JSoup不僅解析HTML,還可以創(chuàng)建HTML文檔
它提供了一個非常方便的API,用于提取和操作數(shù)據(jù),使用最好的DOM,CSS和類似jquery的方法。JSoup實現(xiàn)了WHATWG HTML5規(guī)范,并將HTML解析到同一個DOM,就像現(xiàn)代瀏覽器一樣。
16.Cryptographic Library
Apache Commons Codec軟件包包含各種格式的簡單編碼器和解碼器,如Base64和Hexadecimal。
除了這些廣泛使用的編碼器和解碼器之外,編解碼器包還維護一組語音編碼實用程序。
17.嵌入式SQL數(shù)據(jù)庫庫
我真的很喜歡像H2這樣的內(nèi)存數(shù)據(jù)庫,你可以將它嵌入你的Java應(yīng)用程序中。它們非常適合測試SQL腳本和運行需要數(shù)據(jù)庫的單元測試。但是,H2并不是唯一的DB,您也可以選擇Apache Derby和HSQL。
18. JDBC疑難解答庫
存在一些很好的JDBC擴展庫,可以使調(diào)試更容易,比如P6spy。
這是一個庫,可以無縫地攔截和記錄數(shù)據(jù)庫數(shù)據(jù),而無需對應(yīng)用程序進行代碼更改。您可以使用它們來記錄SQL查詢及其計時。
例如,如果您在代碼中使用PreparedStatment和CallableStatement,則這些庫可以使用參數(shù)和執(zhí)行所花費的時間來記錄完全調(diào)用。
如果您想了解有關(guān)JDBC的更多信息,可以查看JDBC for Beginners。
19.序列化庫
Google協(xié)議緩沖區(qū)是一種以高效但可擴展的格式編碼結(jié)構(gòu)化數(shù)據(jù)的方法。它是Java序列化的更豐富,更好的替代品。我強烈建議有經(jīng)驗的Java開發(fā)人員學(xué)習(xí)Google Protobuf。您可以查看此文章以了解有關(guān)Google協(xié)議緩沖區(qū)的更多信息? 。
20.網(wǎng)絡(luò)圖書館
一些有用的網(wǎng)絡(luò)庫是Netty和Apache MINA。如果您正在編寫需要執(zhí)行低級別網(wǎng)絡(luò)任務(wù)的應(yīng)用程序,請考慮使用這些庫。如果您想了解有關(guān)Java網(wǎng)絡(luò)編程的更多信息,請查看? Java網(wǎng)絡(luò)編程 - TCP / IP套接字編程。

?
對于每個Java開發(fā)人員應(yīng)該使用的一些有用的庫,現(xiàn)在都是如此。Java領(lǐng)域是巨大的,你會發(fā)現(xiàn)大量的庫用于做不同的事情。
如果你想用Java做任何事情,你很可能會找到一個如何做到這一點的庫。與往常一樣,Google是您找到有用的Java庫的最好朋友,但您也可以查看Maven中央存儲庫,找到適合您手頭任務(wù)的一些有用的庫。
另外本人從事在線教育多年,將自己的資料整合建了一個公眾號,對于有興趣一起交流學(xué)習(xí)java的開發(fā)者可以微信搜索:“程序員文明”,里面有大神會給予解答,也會有許多的資源可以供大家學(xué)習(xí)分享,歡迎大家前來一起學(xué)習(xí)進步!