Apache Commons 簡介

當然,還是從歷史說起吧!

這一切始於 1999 年代表 Apache 軟件基金會 (ASF) 註冊的“Apache Group”。基金會支持的項目是 1995 年至 1999 年間創建的 Apache HTTPD Web Server。

同樣是 Jakarta Project(雅加達項目),它是 Sun Microsystems、IBM、Oracle 和來自 Apache 的傢伙合作的結果。而在 2001 年的工作中,開發團隊注意到他們經常編寫相同的功能,有時他們只是簡單地相互複製。這樣的代碼稱為樣板。他們設法收集了大量幫助開發人員的代碼,但沒有庫來存儲它們。

這就是 Jakarta Commons 項目的誕生方式,其中添加了 Java 組件(主要基於現有代碼)。該項目後來更名為 Apache Commons。

更廣泛地說,Apache Commons 是“小型 Java 實用程序的大集合”。它被用於許多開源項目。

Apache Commons 實用程序是 Apache Tomcat、Struts、Hibernate 等項目的核心。

當然,所有這些都可以手動連接,無需構建系統(Maven、Gradle),但我們不會這樣做,只是將它們添加到我們的項目中。

要使用 Maven,首先添加適當的依賴項:

<dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-lang3</artifactId>
   <version>${apache.common.version}</version>
</dependency>

其中${apache.common.version}是這個庫的版本。

對於搖籃(常規):

implementation 'org.apache.commons:commons-lang3:3.12.0'

流行的 Apache 公共庫

以下是最常用的類和方法的列表:

Apache Commons:Lang

該庫包含以下包:


Packages
org.apache.commons.lang
org.apache.commons.lang.builder
org.apache.commons.lang.enum
org.apache.commons.lang.enums
org.apache.commons.lang.exception
org.apache.commons.lang.math
org.apache.commons.lang.mutable
org.apache.commons.lang.reflect
org.apache.commons.lang.text
org.apache.commons.lang.time

在這裡你可以方便快捷地使用字符串、反射、序列化、對象和系統。讓我們記下最常用的方法:

字符串工具

大量用於操作字符串的方法。

  • is(Not)Blank/Empty(String) - 是時候忘記這種類型的檢查了:if (s!=null && s.trim().length()>0),這裡有一個很好的替代品

StringEscapeUtils

  • (un)escapeSql(String) - 替換PreparedStatment
  • (un)escapeHtml(String) - 處理來自 HTML 的值

ToStringBuilder

  • reflectionToString(Object)是基於反射的toString()實現。當您使用反射刪除字段時,該方法的結果將會改變。

EqualsBuilder & HashCodeBuilder

  • reflectionEquals/HashCode(Object)是自動生成的一個很好的替代方法,它有自己的優勢:這兩個方法考慮了對像在運行過程中的結構變化,例如,添加字段

異常工具

  • getFullStackTrace(Throwable) - 將整個 StackTrace 輸出為字符串

Apache Commons:集合

Packages
org.apache.commons.collections4
org.apache.commons.collections4.bag
org.apache.commons.collections4.bidimap
org.apache.commons.collections4.collection
org.apache.commons.collections4.comparators
org.apache.commons.collections4.functors
org.apache.commons.collections4.iterators
org.apache.commons.collections4.keyvalue
org.apache.commons.collections4.list
org.apache.commons.collections4.map
org.apache.commons.collections4.multimap
org.apache.commons.collections4.multiset
org.apache.commons.collections4.properties
org.apache.commons.collections4.queue
org.apache.commons.collections4.sequence
org.apache.commons.collections4.set
org.apache.commons.collections4.splitmap
org.apache.commons.collections4.trie
org.apache.commons.collections4.trie.analyzer

一個完美補充 Java SE 集合框架的庫。

CollectionUtils是一個方便使用集合的類:

    filter/find(Collection, Predicate) - 按謂詞過濾和搜索 forAllDo(Collection, Closure) - 對每個元素執行閉包,但不推薦使用此方法,使用Iterator.forEach() is(Not)Empty(Collection) - 允許您在調用isEqualCollection(Collection, Collection)之前不要檢查是否為 null - 有助於比較兩個集合

還有許多其他類別的不同級別的實用程序。在這里和下面,我列出了我的案例中最常用的。

阿帕奇公地:IO

Packages
org.apache.commons.io
org.apache.commons.io.comparator
org.apache.commons.io.file
org.apache.commons.io.file.spi
org.apache.commons.io.filefilter
org.apache.commons.io.function
org.apache.commons.io.input
org.apache.commons.io.input.buffer
org.apache.commons.io.monitor
org.apache.commons.io.output
org.apache.commons.io.serialization

此外,它有助於在 Java 中處理文件:

文件工具

  • copyDirectory(File, File) - 複製目錄
  • copyFile(File, File) - 複製文件
  • listFiles(File, String[], boolean) - 按擴展名遞歸列出文件
  • readFileToString(文件,字符串)
  • writeStringToFile(文件,字符串)

IOUtils

  • closeQuietly(Reader/Writer/InputStream/OutputStream) - 關閉數據流
  • copy(InputStream, OutputStream) - 從一個流複製到另一個