眾所周知,Java的生態環境相當龐大,包含了數量相當可觀的官方及第三方庫。利用這些庫,可以解決在用Java開發時遇到的各類問題,讓開發效率得到顯著提升。
舉些例子,最常用的官方庫有java.lang、java.util、java.io、java.sql、java.net等;而至于目前最流行的第三方庫,就有Junit、SLF4J、GoogleGuava、XStream、JSoup、Gson、JodaTime等,可以說是不勝枚舉。
我到底需要用到哪些Java庫呢?
某些庫再熱門也好,你的項目也未必適用。然而即便如此,大部分項目實際上都還是需要進行單元測試、日志記錄、序列化、代碼規范化等工作的,因此用一些相關的Java庫去解決問題,還是不錯的選擇。
下面,我來介紹一些可以用來解決常見開發問題的熱門Java庫吧。
JUnit起源于xUnit家族的單元測試框架,目前可以說是最知名及常用的測試框架。通過JUnit,可以輕松地寫出可重復測試的代碼。早期版本的JUnit屬于junit.framework包;而從JUnit4開始,便轉移到了org.junit包。
JUnit的一大特色在于給開發者提供了簡潔的圖形界面,如此一來編寫測試代碼便更為輕松,開發的進度也得以顯著加快。
Junit允許多個測試一個接一個,或是并發同時執行,并且會實時返回測試結果,而且還帶有進度條,提示開發者測試進度如何。一般當測試正常進行時,進度條是綠的;而當遇到了錯誤,就會變紅。
此外,JUnit還允許開發者創建測試套件(TestSuite)來查看、檢測整體的測試進度及測試期間發生的副作用。
對于很多項目而言,單元測試是非常重要的。JUnit之所以能夠成為Java圈中最熱門的測試庫,正是因為它既簡潔又高效。
SLF4J或SimpleLoggingFacadeforJava,為不同的框架提供了一個抽象概念,允許開發人員在部署時插入任何框架。SLF4J的功能在于基于外觀模式的簡單日志API,并將客戶端API與日志后端分開。
通過向classpath中添加所需的綁定,可以發現其后端。由于客戶端API和后端完全解耦,因此它可以集成到任何框架或現有的代碼片段。
創建這個有用的機制的人是CekiGülcü。你可以在SLF4J下載鏈接傷下載SLF4J。
GoogleGuava是Java編程的另一個受歡迎的Java核心庫,它是開源的,由Googl開發的。GoogleGuava項目中包含的庫可用于每天在谷歌上開發/升級的Java的產品。
GoogleGuava軟件包中的庫或多或少是對核心庫的對應部分有增強功能,并使編程更加高效和有效。Guava包括內存緩存、不可變集合、函數類型、圖形庫和可用于I/O、散列、并發、原語、字符串處理、反射等等的API實用程序。
當涉及將對象序列化到XML中時,XStream庫是開發人員值得信賴的選擇。該庫允許開發人員輕松地將對象序列化為XML并返回。
反射是這里的關鍵,用于識別在運行時序列化的對象圖的結構。對象不需要修改。任何內部字段都可以使用XStream序列化。
說到XStream的功能-大多數對象可以被序列化,并提供特定的映射,提供高性能和低內存占用,適用于具有較高吞吐量的大型對象圖和系統,信息不重復,可自定義的轉換策略,安全的框架,異常情況下的詳細診斷等等。
諸如傳輸,配置,持久化和單元測試等廣泛的應用使它成為Java開發人員社區中流行的Java庫。
Log4j是Apache中的一個庫,可用作日志工具。該工具最初由CekiGülcü開發。但是現在,ApacheSoftwareFoundation已經接管了這個項目。
Log4j恰好是其所在應用領域中最可靠的庫,可以擴展到支持自定義組件配置。配置語法非常簡單,支持XML、YAML和JSON。
Log4J提供對多個API的支持,可以在白名單應用程序中使用不同版本的Log4j或SLF4J。另一個有趣的功能是它支持用戶自定義的消息對象。最重要的是,它的工作速度相當令人印象深刻。
iText是用于在Java中創建和操作PDF文件的Java開源庫。這個庫是由包括布魯諾·洛皮杰(BrunoLowagie)和保羅·蘇亞雷斯(PauloSoares)在內的團隊創建的。
雖然以前的iText版本有很多限制,但最近的版本包括許多新功能,如創建pdf的選項,將文檔從XML、HTML、CSS或數據庫轉換為PDF。生成的PDF符合全球通用標準。它還允許在PDF中添加交互性并添加數字簽名。你可以復制、合并文檔、導入、更改結構、在PDF中添加水印或條形碼F。
jsoup是一個有用的Java庫,用于處理和解析HTML。Jsoup提供了一個有用的用于提取數據的API。jsoup中實現的標準是WHATWGHTML5。和最新的瀏覽器作法一樣,jsoup將HTML解析為DOM。
它允許或解析來自任何URL或文件的HTML,例如,你可以獲取http://noeticforce.com的主頁信息,解析它,并將所有H2標題提取到元素列表中。
它的用途包括清理和操縱HTML元素和屬性,以檢索用戶提交的數據并過濾掉XSS攻擊屬性,使用jsoup還可以完成更多功能。
Gson是Google的另一個庫,它輕而易舉的將JavaObjects轉換成等效的JSON表示形式。
雖然有一些允許將Java對象轉換為JSON的開源項目,但它們要求您將Java注釋放在您使用的類中。顯然,如果您無法訪問源代碼,則無法執行此操作,此外,大多數開源項目都不支持Java泛型。Gson考慮到這些問題。
它提供了簡單的toJson()和fromJson()方法,可用于將Java對象和JSON互相轉換。Gson庫允許將不可修改的對象轉換為JSON并返回。如上所述,它為Java泛型提供了極大的支持,并允許對象的自定義表示。
ApachePDFBox是另一個可用于操作PDF文件的開源庫。這個項目最初由本·利奇菲爾德(BenLitchfield)發起的,后來被Apache接管。
PDFBox的主要功能使其成為超級庫,其中包括PDF創建、將單個PDF分割為多個PDF文件、合并并提取PDF文本的Unicode文本,填寫PDF表單,根據PDF/A標準驗證PDF文件,將PDF保存為圖像并對PDF進行數字簽名。
這就是我一直強調的簡單但功能強大的庫,它節省了大量的開發時間。Joda-Time是一個Java庫,作為Java中日期和時間類的一個很好的替代品。
JodaTime很容易使用,并且像getYear()或getDayOfWeek()這樣的屬性訪問器可以直接獲取日期,及其更詳細的信息。
JodaTime還提供計算日期和時間的功能,并支持幾乎所有需要的日期格式,而且肯定難以用簡單的JDK方法進行復制。
除了上述10個庫外,還有許多其他通用于特定領域的Java庫應用于一些小型或大型的項目。以下是其中一些庫:
用于通過HTTP協議有效地在現代應用程序之間交換數據。Okhttp在斷網時恢復連接,在多個基于IP的服務中切換IP地址。okhttp的一個有用的功能是與現代TLS(SNI,ALPN)的自動連接,并且在發生故障時回到TLS1.0。
這是另一個通用且有用的Java庫,它集成了任何規模和大小的Java應用程序。Quartz庫可用于創建數百,數千或更多的作業,可根據應用需求進行擴展。Quartz具有諸如JTA事務和集群等功能,可用于企業級應用程序的支持。
Java具有龐大的生態圈,所以你可以很容易的找到各種各樣的插件庫,你需要做的只是從海量的插件庫中選出哪一個對你的項目更加適合。從頭開發也是一種選擇,但是當你找到了可以自由使用的插件,為什么還要花費更多的時間來重新開發構建呢?