可重用性是Jakarta Commons项目的灵魂所在。这些包在设计阶段就已经考虑了可重用性问题。其中一些包,例如Commons里面用来记录日志的Logging包,最初是为其他项目设计的,例如Jakarta Struts项目,当人们发现这些包对于其他项目也非常有用,能够极大地帮助其他项目的开发,他们决定为这些包构造一个"公共"的存放位置,这就是Jakarta Commons项目。 为了真正提高可重用性,每一个包都必须不依赖于其他大型的框架或项目。因此,Commons项目的包基本上都是独立的,不仅是相对于其他项目的独立,而且相对于Commons内部的大部分其他包独立。虽然存在一些例外的情况,例如Betwixt包要用到XML API,但绝大部分只使用最基本的API,其主要目的就是要能够通过简单的接口方便地调用。 不过由于崇尚简洁,许多包的文档变得过于简陋,缺乏维护和支持,甚至有一部分还有错误的链接,文档也少得可怜。大部分的包需要我们自己去找出其用法,甚至有时还需要我们自己去分析其适用场合。本文将逐一介绍这些包,希望能够帮助你迅速掌握这一积累了许多人心血的免费代码库。 说明:Jakarta Commons和Apache Commons是不同的,后者是Apache Software Foundation的一个顶层项目,前者则是Jakarta项目的一个子项目,同是也是本文要讨论的主角。本文后面凡是提到Commons的地方都是指Jakarta的Commons。 为了便于说明,本文把Commons项目十八个成品级的组件(排除了EL、Latka和Jexl)分成5类,如下表所示 commons分为3部分Commons Proper、Commons Sandbox和Commons Dormant Commons Proper:提供了设计良好可重用的java组件,并都经过了广泛、严格的测试。 Commons Sandbox:处于实验、测试阶段的组件。 Commons Dormant:处于停滞状态,从Sandbox退出的,不活跃的组件,谨慎使用。 Commons Proper组件: Codec——包含一些通用的编码解码算法。包括一些语音编码器, Hex, Base64, 以及URL encoder。 BeanUtils——提供对 Java 反射和自省API的包装,处理javabean的工具。 Betwixt——将JavaBeans与XML相互转换。 Digester——基于规则的XML文档解析,主要用于XML到Java对象的映射. Email——处理e-mail FileUpload——web应用中的文件上传组件 IO——帮助进行IO功能开发 JXPath——使用XPath语法操作javabean的工具。 Lang——提供对java.lang包的扩展 Chain——对Chain of Responsibility(责任链)设计模式的实现。使多个对象都有机会处理请求, 从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。 CLI——处理命令行的命令的解析。 Attributes—— 支持源代码级的元数据。 Collections——扩展和增加标准的 Java Collection框架。 Configuration——操作各种格式的配置文件。Properties文件 /XML文件 /JNDI /JDBC 数据源 /System properties /Applet parameters / Servlet parameters Daemon——创建类似unix守护线程的java代码,可以安全地执行一些后台操作,线程不被某个应用程序控制,而是由操作系统控制 类似windows的service,可以设置一个服务依赖于另一个服务,一个服务关闭前必须先执行另一个服务。 DBCP——一个数据库连接池 DbUtils——一个JDBC的工具类,比如可以将ResultSets生成javabean。 Discovery——提供工具来定位资源 (包括类) ,通过使用各种模式来映射服务/引用名称和资源名称。 EL——JSP 2.0引入的表达式 HttpClient——使用HTTP协议的客户端开发框架 Jelly——Jelly能够把XML转换成可执行代码,所以Jelly是一个基于XML与Java的脚本和处理引擎。 Jelly借鉴了JSP定指标签,Velocity, Cocoon和Xdoclet中的脚本引擎的许多优点。Jelly可以用在命令行,Ant或者Servlet之中。 Jexl——Jexl是一个表达式语言,通过借鉴来自于Velocity的经验扩展了JSTL定义的表达式语言。 Launcher——跨平台的java程序的启动 Logging——提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于具体的日志实现工具。 它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具。用户被假定已熟悉某种日志实现工具的更高级别的细节。JCL提供的接口,对其它一些日志工具,包括Log4J, Avalon LogKit, and JDK 1.4等,进行了简单的包装,此接口更接近于Log4J和LogKit的实现. Math——Math 是一个轻量的,自包含的数学和统计组件,解决了许多非常通用但没有及时出现在Java标准语言中的实践问题. Modeler—— 支持兼容JMX规范的MBeans开发。 Net——集合了网络工具和协议工具的实现 Pool——Commons-Pool 提供了通用对象池接口,一个用于创建模块化对象池的工具包,以及通常的对象池实现。 Primitives——对java原始类型的支持。 SCXML——处理SCXML Transaction——事务处理,实现了多层次锁、事务集合、事务文件的访问。 Validator——提供了一个简单的,可扩展的框架来在一个XML文件中定义校验器 (校验方法)和校验规则。支持校验规则的和错误消息的国际化。 VFS——访问各种文件系统,可以是本地文件、HTTP服务器上的文件、zip中的文件。 Commons Sandbox组件: Compress——处理压缩文件如tar, zip 和 bzip2 格式。 CSV——处理CSV文件 Exec——安全地处理外部进程 Finder——实现类似UNIX find命令的功能 I18n——处理软件的I18n功能 Id——生成id号功能 Javaflow——捕捉程序运行状态 JCI——java编译接口 OpenPGP——处理加密方法OpenPGP. Pipeline——处理类似工作队列的管道工具 Proxy——生成动态代理 --------------------------------org.apache.commons.beanutils.PropertyUtils; copyProperties(a,b);//把相同类型b的属性赋值给a -------------------------------- 在org.apache.commons包中提供了的一系列能简化一些编程过程中常见问题的共通函数和类,使程序员能把主要精力集中在 构架,业务实现和优化而不是具体实现及验证上,一言以蔽之,它能使我们避免重复的发明车轮。
|