可重用性是Jakarta Commons項(xiàng)目的靈魂所在。這些包在設(shè)計(jì)階段就已經(jīng)考慮了可重用性問題。其中一些包,例如Commons里面用來記錄日志的Logging包,最初是為其他項(xiàng)目設(shè)計(jì)的,例如Jakarta Struts項(xiàng)目,當(dāng)人們發(fā)現(xiàn)這些包對于其他項(xiàng)目也非常有用,能夠極大地幫助其他項(xiàng)目的開發(fā),他們決定為這些包構(gòu)造一個"公共"的存放位置,這就是Jakarta Commons項(xiàng)目。 為了真正提高可重用性,每一個包都必須不依賴于其他大型的框架或項(xiàng)目。因此,Commons項(xiàng)目的包基本上都是獨(dú)立的,不僅是相對于其他項(xiàng)目的獨(dú)立,而且相對于Commons內(nèi)部的大部分其他包獨(dú)立。雖然存在一些例外的情況,例如Betwixt包要用到XML API,但絕大部分只使用最基本的API,其主要目的就是要能夠通過簡單的接口方便地調(diào)用。 不過由于崇尚簡潔,許多包的文檔變得過于簡陋,缺乏維護(hù)和支持,甚至有一部分還有錯誤的鏈接,文檔也少得可憐。大部分的包需要我們自己去找出其用法,甚至有時還需要我們自己去分析其適用場合。本文將逐一介紹這些包,希望能夠幫助你迅速掌握這一積累了許多人心血的免費(fèi)代碼庫。 說明:Jakarta Commons和Apache Commons是不同的,后者是Apache Software Foundation的一個頂層項(xiàng)目,前者則是Jakarta項(xiàng)目的一個子項(xiàng)目,同是也是本文要討論的主角。本文后面凡是提到Commons的地方都是指Jakarta的Commons。 為了便于說明,本文把Commons項(xiàng)目十八個成品級的組件(排除了EL、Latka和Jexl)分成5類,如下表所示 commons分為3部分Commons Proper、Commons Sandbox和Commons Dormant Commons Proper:提供了設(shè)計(jì)良好可重用的java組件,并都經(jīng)過了廣泛、嚴(yán)格的測試。 Commons Sandbox:處于實(shí)驗(yàn)、測試階段的組件。 Commons Dormant:處于停滯狀態(tài),從Sandbox退出的,不活躍的組件,謹(jǐn)慎使用。 Commons Proper組件: Codec——包含一些通用的編碼解碼算法。包括一些語音編碼器, Hex, Base64, 以及URL encoder。 BeanUtils——提供對 Java 反射和自省API的包裝,處理javabean的工具。 Betwixt——將JavaBeans與XML相互轉(zhuǎn)換。 Digester——基于規(guī)則的XML文檔解析,主要用于XML到Java對象的映射. Email——處理e-mail FileUpload——web應(yīng)用中的文件上傳組件 IO——幫助進(jìn)行IO功能開發(fā) JXPath——使用XPath語法操作javabean的工具。 Lang——提供對java.lang包的擴(kuò)展 Chain——對Chain of Responsibility(責(zé)任鏈)設(shè)計(jì)模式的實(shí)現(xiàn)。使多個對象都有機(jī)會處理請求, 從而避免請求的發(fā)送者和接收者之間的耦合關(guān)系。將這些對象連成一條鏈,并沿著這條鏈傳遞請求,直到有一個對象處理它為止。 CLI——處理命令行的命令的解析。 Attributes—— 支持源代碼級的元數(shù)據(jù)。 Collections——擴(kuò)展和增加標(biāo)準(zhǔn)的 Java Collection框架。 Configuration——操作各種格式的配置文件。Properties文件 /XML文件 /JNDI /JDBC 數(shù)據(jù)源 /System properties /Applet parameters / Servlet parameters Daemon——創(chuàng)建類似unix守護(hù)線程的java代碼,可以安全地執(zhí)行一些后臺操作,線程不被某個應(yīng)用程序控制,而是由操作系統(tǒng)控制 類似windows的service,可以設(shè)置一個服務(wù)依賴于另一個服務(wù),一個服務(wù)關(guān)閉前必須先執(zhí)行另一個服務(wù)。 DBCP——一個數(shù)據(jù)庫連接池 DbUtils——一個JDBC的工具類,比如可以將ResultSets生成javabean。 Discovery——提供工具來定位資源 (包括類) ,通過使用各種模式來映射服務(wù)/引用名稱和資源名稱。 EL——JSP 2.0引入的表達(dá)式 HttpClient——使用HTTP協(xié)議的客戶端開發(fā)框架 Jelly——Jelly能夠把XML轉(zhuǎn)換成可執(zhí)行代碼,所以Jelly是一個基于XML與Java的腳本和處理引擎。 Jelly借鑒了JSP定指標(biāo)簽,Velocity, Cocoon和Xdoclet中的腳本引擎的許多優(yōu)點(diǎn)。Jelly可以用在命令行,Ant或者Servlet之中。 Jexl——Jexl是一個表達(dá)式語言,通過借鑒來自于Velocity的經(jīng)驗(yàn)擴(kuò)展了JSTL定義的表達(dá)式語言。 Launcher——跨平臺的java程序的啟動 Logging——提供的是一個日志(Log)接口(interface),同時兼顧輕量級和不依賴于具體的日志實(shí)現(xiàn)工具。 它提供給中間件/日志工具開發(fā)者一個簡單的日志操作抽象,允許程序開發(fā)人員使用不同的具體日志實(shí)現(xiàn)工具。用戶被假定已熟悉某種日志實(shí)現(xiàn)工具的更高級別的細(xì)節(jié)。JCL提供的接口,對其它一些日志工具,包括Log4J, Avalon LogKit, and JDK 1.4等,進(jìn)行了簡單的包裝,此接口更接近于Log4J和LogKit的實(shí)現(xiàn). Math——Math 是一個輕量的,自包含的數(shù)學(xué)和統(tǒng)計(jì)組件,解決了許多非常通用但沒有及時出現(xiàn)在Java標(biāo)準(zhǔn)語言中的實(shí)踐問題. Modeler—— 支持兼容JMX規(guī)范的MBeans開發(fā)。 Net——集合了網(wǎng)絡(luò)工具和協(xié)議工具的實(shí)現(xiàn) Pool——Commons-Pool 提供了通用對象池接口,一個用于創(chuàng)建模塊化對象池的工具包,以及通常的對象池實(shí)現(xiàn)。 Primitives——對java原始類型的支持。 SCXML——處理SCXML Transaction——事務(wù)處理,實(shí)現(xiàn)了多層次鎖、事務(wù)集合、事務(wù)文件的訪問。 Validator——提供了一個簡單的,可擴(kuò)展的框架來在一個XML文件中定義校驗(yàn)器 (校驗(yàn)方法)和校驗(yàn)規(guī)則。支持校驗(yàn)規(guī)則的和錯誤消息的國際化。 VFS——訪問各種文件系統(tǒng),可以是本地文件、HTTP服務(wù)器上的文件、zip中的文件。 Commons Sandbox組件: Compress——處理壓縮文件如tar, zip 和 bzip2 格式。 CSV——處理CSV文件 Exec——安全地處理外部進(jìn)程 Finder——實(shí)現(xiàn)類似UNIX find命令的功能 I18n——處理軟件的I18n功能 Id——生成id號功能 Javaflow——捕捉程序運(yùn)行狀態(tài) JCI——java編譯接口 OpenPGP——處理加密方法OpenPGP. Pipeline——處理類似工作隊(duì)列的管道工具 Proxy——生成動態(tài)代理 --------------------------------org.apache.commons.beanutils.PropertyUtils; copyProperties(a,b);//把相同類型b的屬性賦值給a -------------------------------- 在org.apache.commons包中提供了的一系列能簡化一些編程過程中常見問題的共通函數(shù)和類,使程序員能把主要精力集中在 構(gòu)架,業(yè)務(wù)實(shí)現(xiàn)和優(yōu)化而不是具體實(shí)現(xiàn)及驗(yàn)證上,一言以蔽之,它能使我們避免重復(fù)的發(fā)明車輪。
|