深圳幻海软件技术有限公司 欢迎您!

全面的Java开源Apache Commons 工具类介绍

2023-02-26

前言ApacheCommons工具类大家都有用过,但是可能缺乏系统学习,只用到了一小部分功能,无法发挥极限的价值,大白话说就是,一颗好白菜都让猪给拱了!代码过多,手机观看效果不佳,建议收藏后在电脑上静悄悄地看。因内容健康,可大胆转发,即使未满十八岁,在没有家长陪同下也一样可以观看!1、BeanUti

前言

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) 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.

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(“<?xml version=’1.0′ encoding=’UTF-8′ ?> 
”);  
 // 创建一个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(  
 "<?xml version=’1.0′ encoding=’UTF-8′ ?> <person><age>25</age><name>James Smith</name></person>");  
 //创建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);  
 }  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜! 关注我,私信回复我“资料”

获取免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构视频学习资料以及电子书资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

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());  
 }  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

15.Validator

通用验证系统,该组件提供了客户端和服务器端的数据验证框架。

1.验证日期

// 获取日期验证  
DateValidator validator = DateValidator.getInstance();  
// 验证/转换日期  
Date fooDate = validator.validate(fooString, "dd/MM/yyyy");  
if (fooDate == null) {  
 // 错误 不是日期  
 return;  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

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"); 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

3.配置文件中使用验证

<form-validation>  
 <global>  
 <validator name="required"  
 classname="org.apache.commons.validator.TestValidator"  
 method="validateRequired"  
 methodParams="java.lang.Object, org.apache.commons.validator.Field"/>  
 </global>  
 <formset>  
 </formset>  
</form-validation>  
添加姓名验证.  
<form-validation>  
 <global>  
 <validator name="required"  
 classname="org.apache.commons.validator.TestValidator"  
 method="validateRequired"  
 methodParams="java.lang.Object, org.apache.commons.validator.Field"/>  
 </global>  
 <formset>  
 <form name="nameForm">  
 <field property="firstName" depends="required">  
 <arg0 key="nameForm.firstname.displayname"/>  
 </field>  
 <field property="lastName" depends="required">  
 <arg0 key="nameForm.lastname.displayname"/>  
 </field>  
 </form>  
 </formset>  
</form-validation> 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

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();  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.