开源工具导航—— Apache Commons与Guava全览

程谦
2023-12-01

【本文目录】


作为一名开发,好的工具类可以极大的提升我们的开发效率,在Java中,我们最常用的三方工具类,最著名的无非Apache Commons和Guava。

Apache Commons 最初是作为 Jakarta 项目的一个补充核心 Java 集合 API 的项目,最终成为 Apache 软件基金会的一个项目

Apache Commons

Apache Commons is an Apache project focused on all aspects of reusable Java components. —— apache官网

译:Apache Commons 专注于提供各个方面的Java组件库。 (Apache Commons曾隶属于Jakarta项目)

它的各个很多,很全面,以下是当前Apache Commons已完成孵化的项目,其中日常工作比较常用的加粗标识。

组件用途
BECL字节码操作,类似Javassist
BeanUtils反射操作
BSFPython等脚本的引擎的实现
Chain一个责任链模式的实现
可参考之前Mybatis源码系列的责任链文
CLI用于解析传递给程序的命令行命令
Codec编/解码工具
Collections集合工具类
Compress压缩/解压工具类
Configuration从各类源读取配置
Crypto加密库
CSVCSV文件工具类
Daemon将一个普通的java
应用程序作为linux
或windows的守护进程服务
DBCP数据库连接池实现
可参考之前Mybatis源码系列的JDBC文
DbUtilsDB工具
DigesterXML-java对象的解析器
可参考之前Mybatis源码系列的XML文
EmailEmail工具类
Exec对Java的Runtime封装
FileUpload文件上传工具
Functor对函数式编程支持
但是官网提供的api已经无法再maven
仓库找到,可能已经不再支持
Geometry几何学,空间/坐标类
Imaging图像处理类
IOIO工具类
JCI规范Java编译接口
已有Groovy编译器等实现
JCS一个JAVA缓存实现
Jelly一种将 XML 转换为可执行代码的工具
Jexl基于 JSTL表达式语言的一些
扩展的表达式语言
JXPath可使用XPath语法操作Java Bean
Lang对java.lang.*下的方法扩展
包括字符串/反射/时间等。
LoggingJCL
前文Mybatis源码系列Log篇可参考
Math数学运算工具
Net网络工具类
Numbers复数,分数,向量,组合等
OGNLOGNL表达式支持
Pool通用的池化工具
Proxy动态代理实现
RNG随机数生成器
SCXML基于xml的通用状态机
Statistics从Math脱离出来的统计学部分
Text专注于字符串算法
Validator一个可配置的(通常是 XML)验证引擎
VFS虚拟文件系统组件
Weaver字节码增强

Guava

Guava 是一组来自 Google 的核心 Java 库,其中包括新的集合类型(例如 multimap 和 multiset)、不可变集合、图形库以及用于并发、I/O、散列、缓存、原语、字符串等的实用程序。

组件用途
Basic Utilities基础工具,包含Ordering,Optional
Throwables等
CollectionsGuava 对 JDK 集合生态系统的扩展
Graphs图形建模库
Cache本地缓存实现
Functional idioms函数式编程
Strings字符串工具
Concurrency并发工具类
Primitives原生类型,包括不可变集合等
Range范围工具类
Hashinghash运算工具类
提供md5,sha1等hash实现
I/OIO工具类,
提供Sink,Source抽象
EventBus基于观察者模式的消息通知组件
Math数据运算工具
Reflection反射工具类

比较

  1. apache commons显然实现广泛,拥有众多子项目,Guava更适合与前者的一部分子集比较,而非全部。
  2. 在集合方面,Google Guava 的诞生是出于在库中使用泛型的需要,而 Apache Commons 早期(4之前)没有提供。
  3. apache commons有一些违反JDK接口规范的地方,比如Collection接口add原返回值代表(已存在返回true,不存在返回false),而apache commons的Bag接口继承了Collection,又重新定义了add返回值含义(已存在返回false,不存在返回true)。这意味着Collection接口的里氏替换原则被破坏了。这也是Google开发Guava的一点原因。

总结

apache commons与guava都是优秀且有着强大技术背景的开源工具库,相较而言,如果对JDK规范本身具有认同感的开发者显然Guava是更好的选择,反之,则是Apache Commons。当然两者之间没有交集的部分其实更多,混用也是一种不错的选择(前提是我们对他们的特性足够了解)。

 类似资料: