Jakarta Commons(現 Apache Commons Proper)旨在提供獨立、可復用的 Java 組件,多源自 Struts、Tomcat 等項目共性代碼抽取。組件間低耦合,專注小范圍功能,適合服務端開發。本文覆蓋 Web 相關與小程序兩大類。
用途:統一處理命令行參數,支援選項、參數值、幫助生成。
// 定義選項
Options opts = new Options();
opts.addOption("t", false, "show current time");
opts.addOption("n", true, "your name");
// 解析
CommandLineParser parser = new BasicParser();
CommandLine cmd = parser.parse(opts, args);
if (cmd.hasOption("n"))
System.out.println("Hello " + cmd.getOptionValue("n"));
核心類:Options、Option、CommandLineParser、CommandLine。
用途:運行時定位介面實現類(SPI 模式),支援 META-INF/services、系統屬性、類加載器多種策略。
// 獲取類加載器
ClassLoaders loaders = ClassLoaders.getAppLoaders(MyInterface.class, getClass(), false);
// 發現並實例化
DiscoverClass discover = new DiscoverClass(loaders);
MyInterface impl = (MyInterface) discover.newInstance(MyInterface.class);
impl.doWork();
遵循 Sun Service Provider 規範,適用於插件架構、驅動加載。
核心亮點:
StringUtils:capitalize()、isBlank()、join()、split() 等 100+ 靜態方法RandomStringUtils:生成隨機字符串/密碼NumberUtils:數字解析、比較、範圍Builder 系列:ToStringBuilder、EqualsBuilder、HashCodeBuilder、CompareToBuilder —— 一鍵生成高質量標準方法Enum:類型安全枚舉基類(Java 5 前的替代方案)
// ToStringBuilder 示例
public String toString() {
return new ToStringBuilder(this)
.append("rate", rate)
.append("years", years)
.toString();
}
關鍵數據結構:
| 接口/類 | 特性 | 典型場景 |
|---|---|---|
Bag / HashBag | 可重複元素 + 計數 | 詞頻統計、訪問次數 |
Buffer / BinaryHeap | 定序移除:FIFO/LIFO/自然序/自定義 Comparator | 任務隊列、優先級調度 |
FastArrayList / FastHashMap | 快/慢模式:讀多寫少場景無鎖讀,寫時複製 | 高併發緩存、配置表 |
Iterator 擴展 | 數組迭代器、鏈式迭代器、過濾迭代器 | 複雜遍歷邏輯封裝 |
Comparator 擴展 | NullComparator、ReverseComparator、鏈式比較器 | 靈活排序規則組合 |