|
一個(gè)優(yōu)秀且經(jīng)驗(yàn)豐富的Java開(kāi)發(fā)人員的特點(diǎn)之一是對(duì)API的廣泛了解,包括JDK和第三方庫(kù)。我花了很多時(shí)間學(xué)習(xí)API,特別是在閱讀Effective Java 3rd Edition之后,Joshua Bloch建議如何使用現(xiàn)有的API進(jìn)行開(kāi)發(fā),而不是為常用的東西寫新的代碼。 在本文中,我將分享一些Java開(kāi)發(fā)人員應(yīng)該熟悉的最有用和最重要的庫(kù)和API。但是,我沒(méi)有包含框架,例如Spring和Hibernate,因?yàn)樗鼈兎浅S忻揖哂刑囟üδ堋?/p> 總的來(lái)說(shuō),我在日常項(xiàng)目包含了有用的庫(kù),包括Log4j日志庫(kù),Jackson JSON解析庫(kù),以及JUnit和Mockito等單元測(cè)試API。如果需要在項(xiàng)目中使用,則在項(xiàng)目的classpath包含這些JAR,也可以使用Maven進(jìn)行依賴管理。 當(dāng)你使用Maven進(jìn)行依賴管理時(shí),它會(huì)自動(dòng)下載這些庫(kù),包括它們所依賴的庫(kù),稱為傳遞依賴。 例如,如果你下載Spring Framework,它還將下載Spring所依賴的所有其他JAR,例如Log4j。 你可能沒(méi)注意到,但有正確版本的JAR是一個(gè)令人頭疼的問(wèn)題。如果是錯(cuò)誤的JAR版本,那么你將遇到ClassNotFoundException, NoClassDefFoundError或 UnsupportedClassVersionError Java程序員20個(gè)有用的開(kāi)源庫(kù)這是我收集的一些有用的第三方庫(kù),Java開(kāi)發(fā)可以使用它們?cè)趹?yīng)用中來(lái)完成許多有用的功能。要使用這些庫(kù),Java開(kāi)發(fā)人員應(yīng)該熟悉它,這就是本文的重點(diǎn)。如果你覺(jué)得有用,你可以研究該庫(kù)并使用它。 1.日志庫(kù)日志庫(kù)非常常見(jiàn),因?yàn)樵诿總€(gè)項(xiàng)目中都需要它們。它們是服務(wù)器端應(yīng)用最重要的東西,因?yàn)槿罩局环旁诳梢钥吹綉?yīng)用程序當(dāng)前運(yùn)行時(shí)情況的地方。盡管JDK附帶了自己的日志庫(kù),但還有更好的替代方案,例如Log4j,SLF4j和LogBack。 ![]() Java開(kāi)發(fā)人員應(yīng)該熟悉日志庫(kù)的優(yōu)缺點(diǎn),并且知道 為什么使用SLF4j比普通Log4j更好 2. JSON解析庫(kù)在當(dāng)今的Web服務(wù)和物聯(lián)網(wǎng)領(lǐng)域,JSON已成為將信息從客戶端傳送到服務(wù)器的首選協(xié)議。他們已經(jīng)替換XML成為在獨(dú)立平臺(tái)間傳輸信息的最佳方式。 遺憾的是,JDK沒(méi)有JSON庫(kù)。但是,有許多優(yōu)秀的第三方庫(kù)允許你解析和創(chuàng)建JSON消息,如Jackson和Gson。 Java Web開(kāi)發(fā)人員應(yīng)該熟悉這些庫(kù)中的至少一個(gè)。如果你想了解有關(guān)Jackson和JSON的更多信息,我建議你看看 Udemy的課程JSON with the Java API 3.單元測(cè)試庫(kù)單元測(cè)試是將普通開(kāi)發(fā)人員與優(yōu)秀開(kāi)發(fā)人員區(qū)分開(kāi)來(lái)的最重要的事情。程序員經(jīng)常有理由不寫單元測(cè)試,但逃避寫單元測(cè)試的最常見(jiàn)的借口是缺乏常用單元測(cè)試庫(kù)的經(jīng)驗(yàn)和知識(shí),包括JUnit,Mockito和PowerMock。 ![]() 我在2018年有一個(gè)目標(biāo)就是提高我對(duì)單元測(cè)試和集成測(cè)試庫(kù)的了解,比如JUnit 5,Cucumber,Robot框架和一些其他的。 我還在Udemy注冊(cè)了 JUnit and Mockito Crash Course 。即使你了解JUnit和單元測(cè)試的基礎(chǔ)知識(shí),可能也希望更新并進(jìn)階自己的知識(shí)。 4.通用庫(kù)Java開(kāi)發(fā)人員可以使用幾個(gè)很好的通用第三方庫(kù),比如Apache Commons和Google Guava。我總是在我的項(xiàng)目中包含這些庫(kù),因?yàn)樗鼈兒?jiǎn)化了很多功能。 正如Joshua Bloch在Effective Java中所說(shuō)的那樣,重復(fù)造輪子是沒(méi)有意義的。我們應(yīng)該更偏向于使用久經(jīng)考驗(yàn)的庫(kù)而不是時(shí)不時(shí)自己來(lái)實(shí)現(xiàn)。 ![]() 對(duì)Java開(kāi)發(fā)人員來(lái)說(shuō),熟悉Google Guava和Apache Commons庫(kù)是件好事。 5. HTTP庫(kù)我不喜歡JDK的一點(diǎn)是他們對(duì)HTTP支持的缺乏。雖然你可以使用java.net包中的類建立HTTP連接 ,但使用開(kāi)源的第三方庫(kù)(如Apache HttpClient和HttpCore)并不容易或不能無(wú)縫結(jié)合。 雖然JDK 9帶來(lái)了HTTP 2.0的支持和更好的HTTP支持,但我強(qiáng)烈建議所有Java開(kāi)發(fā)人員熟悉流行的HTTP客戶端庫(kù),包括HttpClient和HttpCore。 你還可以查看此文章<u>What's New in Java 9 - Modules and More</u>以了解有關(guān)JDK 9對(duì)HTTP 2支持的更多信息。 ![]() 6. XML解析庫(kù)有許多XML解析庫(kù),包括Xerces,JAXB,JAXP,Dom4j和Xstream。Xerces2是Apache Xerces下一高性能版本,完全兼容的XML解析器。這個(gè)新版本的Xerces引入了Xerces Native Interface(XNI),這是一個(gè)完整的框架,用于構(gòu)建非常模塊化且易于編程的解析器組件和配置。 image Apache Xerces2解析器是XNI的參考實(shí)現(xiàn),但是其他解析器組件,配置和解析器可以使用Xerces Native Interface編寫。Dom4j是另一個(gè)適用于Java應(yīng)用程序的靈活XML框架。如果你想了解有關(guān)Java中XML解析的更多信息,建議你查看Udemy 上的 Java Web Services and XML 在線課程。 7. Excel庫(kù)信不信由你 - 所有現(xiàn)實(shí)世界的應(yīng)用程序都必須以某種形式與Microsoft Office進(jìn)行交互。許多應(yīng)用程序需要提供在Excel中導(dǎo)出數(shù)據(jù)的功能,如果必須從Java應(yīng)用程序執(zhí)行相同操作,則需要Apache POI API。 ![]() 這是一個(gè)非常豐富的庫(kù),允許你 從Java程序讀取和寫入XLS文件。你可以看到該鏈接(http://www./2014/09/how-to-read-write-xlsx-file-in-java-apache-poi-example.html),以獲取在核心Java應(yīng)用程序中讀取Excel文件的工作示例。 8.字節(jié)碼庫(kù)如果你正在編寫生成代碼或與字節(jié)碼交互的框架,那么你需要一個(gè)字節(jié)碼庫(kù)。 它們?cè)试S你讀取和修改應(yīng)用程序生成的字節(jié)碼。Java世界中一些流行的字節(jié)碼庫(kù)是javassist和Cglib Nodep。 ![]() Javassist(Java programming assistant)使Java字節(jié)碼操作變得非常簡(jiǎn)單。它是一個(gè)用于在Java中編輯字節(jié)碼的類庫(kù)。ASM是另一個(gè)有用的字節(jié)碼編輯庫(kù)。如果你不熟悉字節(jié)碼,我建議你查看Introduction to Java Programmers以了解有關(guān)它的更多信息。 9.數(shù)據(jù)庫(kù)連接池庫(kù)如果你正在從Java應(yīng)用程序與數(shù)據(jù)庫(kù)交互但不使用數(shù)據(jù)庫(kù)連接池庫(kù),那么你將丟失一些內(nèi)容。 由于在運(yùn)行時(shí)創(chuàng)建數(shù)據(jù)庫(kù)連接需要花費(fèi)時(shí)間并使請(qǐng)求處理速度變慢,因此始終建議使用數(shù)據(jù)庫(kù)連接庫(kù)。一些流行的是Commons Pool和DBCP。 在Web應(yīng)用程序中,它的Web服務(wù)器通常提供這些功能,但在核心Java應(yīng)用程序中,你需要將這些連接池庫(kù)包含在類路徑中以使用數(shù)據(jù)庫(kù)連接池。 如果你想了解有關(guān)JDBC和Web應(yīng)用程序中的連接池的更多信息,我建議你查看Udemy 中的JSP, Servlet, and JDBC for Beginners課程。 10.消息傳遞庫(kù)與日志記錄和數(shù)據(jù)庫(kù)連接類似,消息傳遞也是許多現(xiàn)實(shí)世界Java應(yīng)用程序的常見(jiàn)功能。 Java提供的JMS,Java Messaging Service不屬于JDK。對(duì)于此組件,你需要包含一個(gè)單獨(dú)的組件 jms.jar。 同樣,如果你正在使用第三方消息傳遞協(xié)議(如Tibco RV),則需要使用第三方JAR tibrv.jar 放在應(yīng)用程序類路徑中。 ![]() 11. PDF庫(kù)與Microsoft Excel類似,PDF庫(kù)是另一種普遍存在的格式。如果你需要在應(yīng)用程序中支持PDF功能,例如 導(dǎo)出數(shù)據(jù)到PDF文件,則可以使用iText和Apache FOP庫(kù)。 兩者都提供有用的PDF相關(guān)功能,但iText更豐富,更好。請(qǐng)參閱此處以了解有關(guān)iText的更多信息。 ![]() 12.日期和時(shí)間庫(kù)在Java 8之前,JDK的數(shù)據(jù)和時(shí)間庫(kù)有很多缺陷,因?yàn)樗鼈儾皇?a target='_blank'>線程安全的,不可變的,并且容易出錯(cuò)。許多Java開(kāi)發(fā)人員依靠JodaTime來(lái)實(shí)現(xiàn)他們的日期和時(shí)間要求。 從JDK 8開(kāi)始,沒(méi)有理由使用Joda,因?yàn)槟阍贘DK 8的新日期和時(shí)間API中獲得了所有功能,但如果你使用的是較舊的Java版本,那么JodaTime是一個(gè)值得學(xué)習(xí)的庫(kù)。 如果你想了解有關(guān)新的日期和時(shí)間API的更多信息,我建議你查看Udemy上的What's new in Java 8課程。它提供了Java 8所有重要功能的精彩概述,包括日期和時(shí)間API。 ![]() 13.Collection庫(kù)盡管JDK擁有豐富的集合庫(kù),但仍有一些第三方庫(kù)提供了更多選項(xiàng),例如Apache Commons集合,Goldman Sachs集合,Google集合和Trove。 Trove庫(kù)特別有用,因?yàn)樗鼮镴ava提供了高速的常規(guī)和原始集合。 ![]() FastUtil是另一個(gè)類似的API。它通過(guò)提供特定類型的映射,集合,列表和優(yōu)先級(jí)隊(duì)列來(lái)擴(kuò)展Java集合框架,較小的內(nèi)存占用,快速訪問(wèn)和插入; 它還提供大型(64位)數(shù)組,集和列表,以及用于二進(jìn)制和文本文件快速實(shí)用的I / O類。 14.Email APIjavax.mail和Apache Commons Email都提供了一個(gè)用于從Java發(fā)送電子郵件的API 。它建立在JavaMail API的基礎(chǔ)之上,旨在簡(jiǎn)化它。 ![]() 15. HTML解析庫(kù)與JSON和XML類似,HMTL是我們?cè)S多人必須處理的另一種常見(jiàn)格式。值得慶幸的是,我們有JSoup,它極大地簡(jiǎn)化了在Java應(yīng)用程序中使用HTML的過(guò)程。 你不僅可以使用JSoup解析HTML,還可以創(chuàng)建HTML文檔 ![]() 它提供了一個(gè)非常方便的API,用于提取和操作數(shù)據(jù),使用DOM,CSS和類似jquery的方法。JSoup實(shí)現(xiàn)了WHATWG HTML5規(guī)范,并將HTML解析到同一個(gè)DOM,就像現(xiàn)代瀏覽器一樣。 16.Cryptographic庫(kù)Apache Commons Codec軟件包包含各種格式的簡(jiǎn)單編碼器和解碼器,如Base64和Hexadecimal。 除了這些廣泛使用的編碼器和解碼器之外,編解碼器包還維護(hù)一組語(yǔ)音編碼實(shí)用程序。 ![]() 17.Embedded SQL Database庫(kù)我真的很喜歡像H2這樣的內(nèi)存數(shù)據(jù)庫(kù),你可以將它嵌入你的Java應(yīng)用程序中。它們非常適合測(cè)試SQL腳本和運(yùn)行需要數(shù)據(jù)庫(kù)的單元測(cè)試。但是,H2并不是唯一的DB,你也可以選擇Apache Derby和HSQL。 ![]() 18. JDBC問(wèn)題排查庫(kù)存在一些很好的JDBC擴(kuò)展庫(kù),可以使調(diào)試更容易,比如P6spy。 這是一個(gè)庫(kù),可以無(wú)縫地?cái)r截和記錄數(shù)據(jù)庫(kù)數(shù)據(jù),而無(wú)需對(duì)應(yīng)用程序進(jìn)行代碼更改。你可以使用它們來(lái)記錄SQL查詢及其計(jì)時(shí)。 例如,如果你在代碼中使用PreparedStatment和CallableStatement,則這些庫(kù)可以記錄一次完全調(diào)用的參數(shù)和執(zhí)行所花費(fèi)的時(shí)間。 ![]() 如果你想了解有關(guān)JDBC的更多信息,可以查看JDBC for Beginners。 19.序列化庫(kù)Google Protocol Buffers是一種以高效可擴(kuò)展的格式編碼結(jié)構(gòu)化數(shù)據(jù)的方法。它是Java序列化的更豐富,更好的替代品。我強(qiáng)烈建議有經(jīng)驗(yàn)的Java開(kāi)發(fā)人員學(xué)習(xí)Google Protobuf。你可以查看此文章以了解有關(guān)Google協(xié)議緩沖區(qū)的更多信息 。 ![]() 20.網(wǎng)絡(luò)庫(kù)一些有用的網(wǎng)絡(luò)庫(kù)是Netty和Apache MINA。如果你正在編寫需要執(zhí)行底層網(wǎng)絡(luò)任務(wù)的應(yīng)用程序,請(qǐng)考慮使用這些庫(kù)。如果你想了解有關(guān)Java網(wǎng)絡(luò)編程的更多信息,請(qǐng)查看 <u>Java Network Programming - TCP/IP Socket Programming</u>。 ![]() ****這些就是對(duì)于每個(gè)Java開(kāi)發(fā)人員都應(yīng)該使用的****一些****有用的庫(kù)****。Java的世界是浩瀚無(wú)窮的,你會(huì)發(fā)現(xiàn)數(shù)不勝數(shù)的庫(kù)用于做不同的事情。 如果你想用Java做任何事情,很可能你會(huì)找到一個(gè)如何實(shí)現(xiàn)的庫(kù)。與往常一樣,Google是你找到有用的Java庫(kù)的最好朋友,但你也可以查看Maven中央存儲(chǔ)庫(kù),找到適合你手頭任務(wù)的一些有用的庫(kù)。 ? 著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者 |
|
|