頂級 Javaer 都在用的 20 個類庫,真香!
共 5760字,需瀏覽 12分鐘
·
2024-04-25 14:31
優(yōu)秀且經(jīng)驗豐富的Java開發(fā)人員的特征之一是對API的廣泛了解,包括JDK和第三方庫。
我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之后 ,Joshua Bloch建議在Java 3rd Edition中使用現(xiàn)有的API進行開發(fā),而不是為常見的東西編寫新的代碼。
這對我來說很有意義,因為這些第二方庫都經(jīng)過了測試。在本文中,我將分享Java開發(fā)人員應(yīng)該熟悉的一些最有用和最基本的庫和API。順便說一句,我沒有包括Spring和Hibernate這樣的框架,因為它們是眾所周知的并且具有特定的功能。
我通常會提供用于日常工作的有用庫,例如Log4j等日志記錄庫,Jackson等JSON解析庫以及JUnit和Mockito等單元測試API。如果需要在項目中使用它們,則可以在項目的類路徑中包含這些庫的JAR以開始使用它們,也可以使用Maven進行依賴項管理。
當使用Maven進行依賴管理時,它將自動下載這些庫,包括它們依賴的庫,稱為傳遞依賴。
例如,如果您下載Spring Framework,那么它還將下載Spring依賴的所有其他JAR,例如Log4j等。
您可能沒有意識到,但是擁有正確版本的依賴JAR令人頭疼。如果您使用的JAR版本錯誤,則將收到ClassNotFoundException或NoClassDefFoundError或UnsupportedClassVersionError 。
這是我收集的一些有用的第三方庫,Java開發(fā)人員可以在其應(yīng)用程序中使用它們來完成許多有用的任務(wù)。為了使用這些庫,Java開發(fā)人員也應(yīng)該熟悉這些,這是本文的重點。如果您有想法,可以研究該庫并加以使用。
1、記錄庫
日志記錄庫很常見,因為在每個項目中都需要它們。對于服務(wù)器端應(yīng)用程序而言,它們是最重要的事情,因為日志僅放置在您可以看到應(yīng)用程序運行狀況的位置。即使JDK附帶了自己的日志記錄庫,也有許多更好的選擇,例如Log4j,SLF4j和LogBack。
Java開發(fā)人員應(yīng)該熟悉日志記錄庫的優(yōu)缺點,并且知道為什么使用SLF4j比普通的Log4j更好 。如果您不知道為什么我建議您閱讀我以前關(guān)于同一主題的文章。
2、JSON解析庫
在當今的Web服務(wù)和物聯(lián)網(wǎng)(IoT)世界中,JSON已成為將信息從客戶端傳送到服務(wù)器的首選協(xié)議。他們已經(jīng)將XML替換為以平臺無關(guān)的方式傳輸信息的最優(yōu)選方式。不幸的是,JDK還沒有JSON庫,但是幸運的是,有很多優(yōu)秀的第三方庫可以讓您解析和創(chuàng)建JSON消息,例如Jackson和Gson。
Java Web開發(fā)人員應(yīng)至少熟悉這些庫之一。插播一條:如果你近期準備面試跳槽,點擊Java面試庫小程序刷題吧,共 2500+ 道,幾乎覆蓋了所有主流 Java 技術(shù)面試題。
3、單元測試庫
單元測試是將普通開發(fā)人員與優(yōu)秀開發(fā)人員區(qū)分開的最重要的事情。經(jīng)常給程序員借口,而不是編寫單元測試,而是最常見的借口,避免單元測試的借口是缺乏流行的單元測試庫(例如JUnit,Mockito和PowerMock)的經(jīng)驗和知識。
推薦一個開源免費的 Spring Boot 實戰(zhàn)項目:
https://github.com/javastacks/spring-boot-best-practice
4、通用庫
Java開發(fā)人員可以使用幾個非常好的通用第三方庫,例如Apache Commons和Google Guava。我總是將這些庫包含在我的項目中,因為它們簡化了許多任務(wù)。正如約書亞·布洛赫(Joshua Bloch)在《 有效的Java》 (現(xiàn)在已經(jīng)有第3版)中正確說的那樣,重新發(fā)明輪子沒有意義,我們應(yīng)該寧愿使用經(jīng)過考驗的庫,也不要時不時編寫自己的例程。
這只是一個優(yōu)秀的Java開發(fā)人員熟悉Google的Guava和Apache commons庫。關(guān)注公眾號:Java技術(shù)棧,回復(fù):Java,可閱讀我寫的系列 Java 教程,也可以前往網(wǎng)站(https://www.javastack.cn)去閱讀。
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的新增功能-模塊等,以了解有關(guān)JDK 9的HTTP 2支持的更多信息。
6、XML解析庫
存在許多XML解析庫,例如Xerces,JAXB,JAXP,Dom4j,Xstream等。Xerces2是Apache Xerces系列中的下一代高性能,完全兼容的XML解析器。Xerces的這個新版本引入了Xerces本機接口(XNI),這是一個用于構(gòu)建解析器組件和配置的完整框架,該框架非常模塊化且易于編程。
Apache Xerces2解析器是XNI的參考實現(xiàn),但其他解析器組件,配置和解析器也可以使用Xerces本機接口編寫。Dom4j是另一個適用于Java應(yīng)用程序的靈活XML框架。
插播一條:如果你近期準備面試跳槽,點擊Java面試庫小程序刷題吧,共 2500+ 道,幾乎覆蓋了所有主流 Java 技術(shù)面試題。
7、Excel閱讀庫
信不信由你,但所有實際應(yīng)用程序都必須以某種形式與Microsoft Office進行交互。許多應(yīng)用程序都需要提供在Excel中導(dǎo)出數(shù)據(jù)的功能,如果必須從Java應(yīng)用程序中導(dǎo)出數(shù)據(jù),則需要Apache POI API。
這是一個非常豐富的庫,它使您可以從Java程序讀取和寫入XLS文件 。您可以看到該鏈接,以獲取在Core 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é)碼編輯庫。
9、數(shù)據(jù)庫連接池庫
如果要通過Java應(yīng)用程序與數(shù)據(jù)庫進行交互,但不使用數(shù)據(jù)庫連接池庫,那么您將丟失某些內(nèi)容。由于在運行時創(chuàng)建連接會花費時間,并使請求處理變慢,因此始終建議使用DB連接庫。最受歡迎的是Commons Pool和DBCP 。
在Web應(yīng)用程序中,通常是Web服務(wù)器提供這些功能,但是在核心Java應(yīng)用程序中,您需要將這些連接池庫包括到類路徑中才能使用數(shù)據(jù)庫連接池。如果您想了解有關(guān)Web應(yīng)用程序中JDBC和連接池的更多信息,建議您閱讀Udemy中的JSP,Servlet和JDBC for Beginners課程。
10、消息庫
與日志記錄和數(shù)據(jù)庫連接類似,消息傳遞也是許多實際Java應(yīng)用程序的共同功能。Java提供了JMS,Java Messaging Service,但這不是JDK的一部分,您需要包括單獨的jms.jar。同樣,如果您使用的是第三方消息傳遞協(xié)議,例如Tibco RV,則需要在應(yīng)用程序類路徑中使用第三方JAR,例如tibrv.jar。
11、PDF庫
與Microsoft Excel和World相似,PDF是另一種普遍存在的格式。如果您需要在應(yīng)用程序中支持PDF功能,例如將數(shù)據(jù)導(dǎo)出為PDF文件,則可以使用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的新Date and Time API本身中獲得所有功能,但是如果您使用的是較舊的Java版本,則JodaTime是一個值得學習的庫。關(guān)注公眾號:Java技術(shù)棧,回復(fù):Java,可閱讀我寫的 Java 8+ 系列教程,也可以前往網(wǎng)站(https://www.javastack.cn)去閱讀。
13、收藏庫
盡管JDK具有豐富的集合庫,但仍有一些第三方庫提供了更多選項,例如Apache Commons集合,Goldman Sachs集合,Google集合和Trove。Trove庫特別有用,因為它為Java提供了高速的常規(guī)和原始集合。
FastUtil是另一個類似的API,它通過提供特定于類型的映射,集合,列表和優(yōu)先級隊列來擴展Java Collections Framework,而這些隊列,內(nèi)存,占用空間小并且可以快速訪問和插入。還為二進制文件和文本文件提供了大型(64位) arrays , sets和lists以及快速,實用的I / O類。
插播一條:如果你近期準備面試跳槽,點擊Java面試庫小程序刷題吧,共 2500+ 道,幾乎覆蓋了所有主流 Java 技術(shù)面試題。
14、電子郵件API
javax.mail和Apache Commons Email –提供用于發(fā)送電子郵件的API。它建立在旨在簡化的JavaMail API之上。
15、HTML解析庫
與JSON和XML相似,HMTL是我們許多人必須處理的另一種常見格式。值得慶幸的是,我們擁有jsoup,它大大簡化了在Java應(yīng)用程序中使用HTML的工作。您可以使用JSoup不僅解析HTML,還可以創(chuàng)建HTML文檔
它提供了使用DOM,CSS和類似jquery的最好方法提取和處理數(shù)據(jù)的非常方便的API。jsoup實現(xiàn)WHATWG HTML5規(guī)范,并將HTML解析為與現(xiàn)代瀏覽器相同的DOM。
16、密碼庫
Apache Commons Codec軟件包包含用于各種格式(例如Base64和Hexadecimal)的簡單編碼器和解碼器。除了這些廣泛使用的編碼器和解碼器之外,編解碼器包還維護了語音編碼實用程序的集合。
17、嵌入式SQL數(shù)據(jù)庫庫
我真的很喜歡H2這樣的內(nèi)存數(shù)據(jù)庫,您可以將其嵌入Java應(yīng)用程序中。它們非常適合測試SQL腳本和運行需要數(shù)據(jù)庫的單元測試。順便說一句,H2不是唯一的數(shù)據(jù)庫,您也可以選擇Apache Derby和HSQL。
18、JDBC故障排除庫
有一些很好的JDBC擴展庫可以使調(diào)試更加容易,例如P6spy。它是一個庫,可在不更改應(yīng)用程序代碼的情況下無縫地攔截和記錄數(shù)據(jù)庫數(shù)據(jù)。您可以使用它們來記錄SQL查詢及其時間。例如,如果您在代碼中使用PreparedStatment和CallableStatement ,則這些庫可以記錄帶有參數(shù)的確切調(diào)用以及執(zhí)行所需的時間。
19、序列化庫
Google協(xié)議緩沖區(qū)協(xié)議緩沖區(qū)是一種以有效但可擴展的格式對結(jié)構(gòu)化數(shù)據(jù)進行編碼的方法。它是Java序列化的更豐富,更好的替代方法,我強烈建議有經(jīng)驗的Java開發(fā)人員學習Google Protobuf。
20、網(wǎng)絡(luò)庫
一些有用的網(wǎng)絡(luò)庫是Netty和Apache MINA。如果您在編寫需要執(zhí)行低級網(wǎng)絡(luò)任務(wù)的應(yīng)用程序,請考慮使用這些庫。
這就是每個Java開發(fā)人員都應(yīng)該熟悉的一些有用的庫 。
Java生態(tài)系統(tǒng)非常龐大,您會發(fā)現(xiàn)大量用于執(zhí)行不同操作的庫。您考慮了一下,就會發(fā)現(xiàn)存在一個可以執(zhí)行此操作的庫。與往常一樣,Google是您找到有用的Java庫的最佳朋友,但是您也可以查看Maven中央存儲庫,以找到一些適合您手頭任務(wù)的有用庫。
文章來源:https://www.javacodegeeks.com/2018/01/top-20-libraries-apis-java-developer-know.html
IntelliJ IDEA 2024 首個大版本發(fā)布!
