史上最全面的Java開源Apache Commons 工具類介紹

前言

Apache Commons 工具類大家都有用過,但是可能缺乏系統學習,只用到了一小部分功能,無法發揮極限的價值,大白話說就是,一顆好白菜都讓豬給拱了!

代碼過多,手機觀看效果不佳,建議收藏后在電腦上靜悄悄地看。因內容健康,可大膽轉發,即使未滿十八歲,在沒有家長陪同下也一樣可以觀看!

1、BeanUtils

提供了對于JavaBean進行各種操作, 比如對象,屬性復制等等。

//1、 克隆對象

// 新創建一個普通Java Bean,用來作為被克隆的對象

public class Person {

private String name = "";

private String email = "";

private int age;

//省略 set,get方法

}

// 再創建一個Test類,其中在main方法中代碼如下:

import java.lang.reflect.InvocationTargetException;

import java.util.HashMap;

import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;

import org.apache.commons.beanutils.ConvertUtils;

public class Test {

/**

* @param args

*/

public static void main(String[] args) {

Person person = new Person();

person.setName("tom");

person.setAge(21);

try {

//克隆

Person person2 = (Person)BeanUtils.cloneBean(person);

System.out.println(person2.getName()+">>"+person2.getAge());

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InstantiationException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

} catch (NoSuchMethodException e) {

e.printStackTrace();

}

}

}

// 原理也是通過Java的反射機制來做的。

// 2、 將一個Map對象轉化為一個Bean

// 這個Map對象的key必須與Bean的屬性相對應。

Map map = new HashMap();

map.put("name","tom");

map.put("email","tom@");

map.put("age","21");

//將map轉化為一個Person對象

Person person = new Person();

BeanUtils.populate(person,map);

// 通過上面的一行代碼,此時person的屬性就已經具有了上面所賦的值了。

// 將一個Bean轉化為一個Map對象了,如下:

Map map = BeanUtils.describe(person)

2.Betwixt

XML與Java對象之間相互轉換。

//1、 將JavaBean轉為XML內容

// 新創建一個Person類

public class Person{

private String name;

private int age;

/** Need to allow bean to be created via reflection */

public PersonBean() {

}

public PersonBean(String name, int age) {

this.name = name;

this.age = age;

}

//省略set, get方法

public String toString() {

return "PersonBean[name='" + name + "',age='" + age + "']";

}

}

//再創建一個WriteApp類:

import java.io.StringWriter;

import org.apache.commons.betwixt.io.BeanWriter;

public class WriteApp {

/**

* 創建一個例子Bean,并將它轉化為XML.

*/

public static final void main(String [] args) throws Exception {

// 先創建一個StringWriter,我們將把它寫入為一個字符串

StringWriter outputWriter = new StringWriter();

// Betwixt在這里僅僅是將Bean寫入為一個片斷

// 所以如果要想完整的XML內容,我們應該寫入頭格式

outputWriter.write(“”);

// 創建一個BeanWriter,其將寫入到我們預備的stream中

BeanWriter beanWriter = new BeanWriter(outputWriter);

// 配置betwixt

// 更多詳情請參考java docs 或最新的文檔

beanWriter.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);

beanWriter.getBindingConfiguration().setMapIDs(false);

beanWriter.enablePrettyPrint();

// 如果這個地方不傳入XML的根節點名,Betwixt將自己猜測是什么

// 但是讓我們將例子Bean名作為根節點吧

beanWriter.write(“person”, new PersonBean(“John Smith”, 21));

//輸出結果

System.out.println(outputWriter.toString());

// Betwixt寫的是片斷而不是一個文檔,所以不要自動的關閉掉writers或者streams,

//但這里僅僅是一個例子,不會做更多事情,所以可以關掉

outputWriter.close();

}

}

//2、 將XML轉化為JavaBean

import java.io.StringReader;

import org.apache.commons.betwixt.io.BeanReader;

public class ReadApp {

public static final void main(String args[]) throws Exception{

// 先創建一個XML,由于這里僅是作為例子,所以我們硬編碼了一段XML內容

StringReader xmlReader = new StringReader(

" 25James Smith");

//創建BeanReader

BeanReader beanReader = new BeanReader();

//配置reader

beanReader.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);

beanReader.getBindingConfiguration().setMapIDs(false);

//注冊beans,以便betwixt知道XML將要被轉化為一個什么Bean

beanReader.registerBeanClass("person", PersonBean.class);

//現在我們對XML進行解析

PersonBean person = (PersonBean) beanReader.parse(xmlReader);

//輸出結果

System.out.println(person);

}

}


3.Codec

提供了一些公共的編解碼實現,比如Base64, Hex, MD5,Phonetic and URLs等等

4.Collections

對java.util的擴展封裝,處理數據還是挺靈活的。

org.apache.commons.collections – Commons Collections自定義的一組公用的接口和工具類

org.apache.commons.collections.bag – 實現Bag接口的一組類

org.apache.commons.collections.bidimap – 實現BidiMap系列接口的一組類

org.apache.commons.collections.buffer – 實現Buffer接口的一組類

org.apache.commons.collections.collection – 實現java.util.Collection接口的一組類

org.apache.commons.collections.comparators – 實現java.util.Comparator接口的一組類

org.apache.commons.collections.functors – Commons Collections自定義的一組功能類

org.apache.commons.collections.iterators – 實現java.util.Iterator接口的一組類

org.apache.commons.collections.keyvalue – 實現集合和鍵/值映射相關的一組類

org.apache.commons.collections.list – 實現java.util.List接口的一組類

org.apache.commons.collections.map – 實現Map系列接口的一組類

org.apache.commons.collections5.Compress.set – 實現Set系列接口的一組類

5.Compress

commons compress中的打包、壓縮類庫。

6.Configuration

用來幫助處理配置文件的,支持很多種存儲方式。

Properties filesXML documentsProperty list files (.plist)JNDIJDBC DatasourceSystem propertiesApplet parametersServlet parameters

7.DBCP

(Database Connection Pool)是一個依賴Jakarta commons-pool對象池機制的數據庫連接池,Tomcat的數據源使用的就是DBCP。

8.DbUtils

Apache組織提供的一個資源JDBC工具類庫,它是對JDBC的簡單封裝,對傳統操作數據庫的類進行二次封裝,可以把結果集轉化成List。,同時也不影響程序的性能。文章轉自肥朝大神

DbUtils類:啟動類

ResultSetHandler接口:轉換類型接口

MapListHandler類:實現類,把記錄轉化成List

BeanListHandler類:實現類,把記錄轉化成List,使記錄為JavaBean類型的對象

Qrery Runner類:執行SQL語句的類

9.Email

提供的一個開源的API,是對javamail的封裝。

10.FileUpload

java web文件上傳功能。

11.HttpClient

基于HttpCore實 現的一個HTTP/1.1兼容的HTTP客戶端,它提供了一系列可重用的客戶端身份驗證、HTTP狀態保持、HTTP連接管理module。

12.http://IO

對http://java.io的擴展 操作文件非常方便。

13.Lang

主要是一些公共的工具集合,比如對字符、數組的操作等等。

14.Logging

提供的是一個Java 的日志接口,同時兼顧輕量級和不依賴于具體的日志實現工具。

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

public class CommonLogTest {

private static Log log = LogFactory.getLog(CommonLogTest.class);

//日志打印

public static void main(String[] args) {

log.error("ERROR");

log.debug("DEBUG");

log.warn("WARN");

log.info("INFO");

log.trace("TRACE");

System.out.println(log.getClass());

}

}

15.Validator

通用驗證系統,該組件提供了客戶端和服務器端的數據驗證框架。

1.驗證日期

// 獲取日期驗證

DateValidator validator = DateValidator.getInstance();

// 驗證/轉換日期

Date fooDate = validator.validate(fooString, "dd/MM/yyyy");

if (fooDate == null) {

// 錯誤 不是日期

return;

}

2.表達式驗證

// 設置參數

boolean caseSensitive = false;

String regex1 = "^([A-Z]*)(?:\-)([A-Z]*)*$"

String regex2 = "^([A-Z]*)$";

String[] regexs = new String[] {regex1, regex1};

// 創建驗證

RegexValidator validator = new RegexValidator(regexs, caseSensitive);

// 驗證返回boolean

boolean valid = validator.isValid("abc-def");

// 驗證返回字符串

String result = validator.validate("abc-def");

// 驗證返回數組

String[] groups = validator.match("abc-def");

3.配置文件中使用驗證

classname="org.apache.commons.validator.TestValidator"

method="validateRequired"

methodParams="java.lang.Object, org.apache.commons.validator.Field"/>

添加姓名驗證.

classname="org.apache.commons.validator.TestValidator"

method="validateRequired"

methodParams="java.lang.Object, org.apache.commons.validator.Field"/>

4.驗證類

Excerpts from org.apache.commons.validator.RequiredNameTest

//加載驗證配置文件

InputStream in = this.getClass().getResourceAsStream("validator-name-required.xml");

ValidatorResources resources = new ValidatorResources(in);

//這個是自己創建的bean 我這里省略了

Name name = new Name();

Validator validator = new Validator(resources, "nameForm");

//設置參數

validator.setParameter(Validator.BEAN_PARAM, name);

Map results = null;

//驗證

results = validator.validate();

if (results.get("firstName") == null) {

//驗證成功

} else {

//有錯誤 int errors = ((Integer)results.get("firstName")).intValue();

}

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容