介绍Java的开源Apache Commons 工具类

    作者:课课家教育更新于: 2019-05-12 16:04:56

    大神带你学编程,欢迎选课

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

    1996年1月,Sun公司发布了Java的第一个开发工具包(JDK 1.0),这是Java发展历程中的重要里程碑,标志着Java成为一种独立的开发工具。9月,约8.3万个网页应用了Java技术来制作。10月,Sun公司发布了Java平台的第一个即时(JIT)编译器。

    介绍Java的开源Apache Commons 工具类_编程语言_java_javaEE_课课家

    前言

    Apache Commons 工具类大家都有用过,但是可能缺乏系统学习,只用到了一小部分功能,无法发挥极限的价值,大白话说就是,一颗好白菜都让猪给拱了!

    代码过多,手机观看效果不佳,建议收藏后在电脑上静悄悄地看。因内容健康,可大胆转发,即使未满十八岁,在没有家长陪同下也一样可以观看!

    1、BeanUtils

    提供了对于JavaBean进行各种操作, 比如对象,属性复制等等。

    1. //1、 克隆对象  
    2. // 新创建一个普通Java Bean,用来作为被克隆的对象  
    3.  public class Person {  
    4.  private String name = "";  
    5.  private String email = "";  
    6.  private int age;  
    7.  //省略 set,get方法  
    8.  }  
    9. // 再创建一个Test类,其中在main方法中代码如下: 
    10.  import java.lang.reflect.InvocationTargetException;  
    11.  import java.util.HashMap;  
    12.  import java.util.Map;  
    13.  import org.apache.commons.beanutils.BeanUtils;  
    14.  import org.apache.commons.beanutils.ConvertUtils;  
    15.  public class Test {  
    16.  /**  
    17.  * @param args  
    18.  */  
    19.  public static void main(String[] args) {  
    20.  Person person = new Person();  
    21.  person.setName("tom");  
    22.  person.setAge(21);  
    23.  try {  
    24.  //克隆  
    25.  Person person2 = (Person)BeanUtils.cloneBean(person);  
    26.  System.out.println(person2.getName()+">>"+person2.getAge());  
    27.  } catch (IllegalAccessException e) {  
    28.  e.printStackTrace();  
    29.  } catch (InstantiationException e) {  
    30.  e.printStackTrace();  
    31.  } catch (InvocationTargetException e) {  
    32.  e.printStackTrace();  
    33.  } catch (NoSuchMethodException e) {  
    34.  e.printStackTrace();  
    35.  }  
    36.  }  
    37.  }  
    38. // 原理也是通过Java的反射机制来做的。 
    39. // 2、 将一个Map对象转化为一个Bean  
    40. // 这个Map对象的key必须与Bean的属性相对应。 
    41.  Map map = new HashMap();  
    42.  map.put("name","tom");  
    43.  map.put("email","tom@");  
    44.  map.put("age","21");  
    45.  //将map转化为一个Person对象  
    46.  Person person = new Person();  
    47.  BeanUtils.populate(person,map);  
    48. // 通过上面的一行代码,此时person的属性就已经具有了上面所赋的值了。 
    49. // 将一个Bean转化为一个Map对象了,如下: 
    50.  Map map = BeanUtils.describe(person) 

    2.Betwixt

    XML与Java对象之间相互转换。

    1. //1、 将JavaBean转为XML内容  
    2. // 新创建一个Person类  
    3. public class Person{  
    4.  private String name;  
    5.  private int age;  
    6.  /** Need to allow bean to be created via reflection */  
    7.  public PersonBean() {  
    8.  }  
    9.  public PersonBean(String name, int age) {  
    10.  this.name = name;  
    11.  this.age = age;  
    12.  }  
    13.  //省略set, get方法  
    14.  public String toString() {  
    15.  return "PersonBean[name='" + name + "',age='" + age + "']";  
    16.  }  
    17. }  
    18. //再创建一个WriteApp类: 
    19. import java.io.StringWriter;  
    20. import org.apache.commons.betwixt.io.BeanWriter;  
    21. public class WriteApp {  
    22. /**  
    23. * 创建一个例子Bean,并将它转化为XML.  
    24. */  
    25. public static final void main(String [] args) throws Exception {  
    26.  // 先创建一个StringWriter,我们将把它写入为一个字符串  
    27.  StringWriter outputWriter = new StringWriter();  
    28.  // Betwixt在这里仅仅是将Bean写入为一个片断  
    29.  // 所以如果要想完整的XML内容,我们应该写入头格式  
    30.  outputWriter.write(“1.0′ encoding=’UTF-8′ ?> 
    31. ”);  
    32.  // 创建一个BeanWriter,其将写入到我们预备的stream中  
    33.  BeanWriter beanWriter = new BeanWriter(outputWriter);  
    34.  // 配置betwixt  
    35.  // 更多详情请参考java docs 或最新的文档  
    36.  beanWriter.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);  
    37.  beanWriter.getBindingConfiguration().setMapIDs(false);  
    38.  beanWriter.enablePrettyPrint();  
    39.  // 如果这个地方不传入XML的根节点名,Betwixt将自己猜测是什么  
    40.  // 但是让我们将例子Bean名作为根节点吧  
    41.  beanWriter.write(“person”, new PersonBean(“John Smith”, 21));  
    42.  //输出结果  
    43.  System.out.println(outputWriter.toString());  
    44.  // Betwixt写的是片断而不是一个文档,所以不要自动的关闭掉writers或者streams,  
    45.  //但这里仅仅是一个例子,不会做更多事情,所以可以关掉  
    46.  outputWriter.close();  
    47.  }  
    48. }  
    49. //2、 将XML转化为JavaBean  
    50. import java.io.StringReader;  
    51. import org.apache.commons.betwixt.io.BeanReader;  
    52. public class ReadApp {  
    53. public static final void main(String args[]) throws Exception{  
    54.  // 先创建一个XML,由于这里仅是作为例子,所以我们硬编码了一段XML内容  
    55.  StringReader xmlReader = new StringReader(  
    56.  " 25James Smith");  
    57.  //创建BeanReader  
    58.  BeanReader beanReader = new BeanReader();  
    59.  //配置reader  
    60.  beanReader.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);  
    61.  beanReader.getBindingConfiguration().setMapIDs(false);  
    62.  //注册beans,以便betwixt知道XML将要被转化为一个什么Bean  
    63.  beanReader.registerBeanClass("person", PersonBean.class);  
    64.  //现在我们对XML进行解析  
    65.  PersonBean person = (PersonBean) beanReader.parse(xmlReader);  
    66.  //输出结果  
    67.  System.out.println(person);  
    68.  }  

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

    获取免费的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 的日志接口,同时兼顾轻量级和不依赖于具体的日志实现工具。

    1. import org.apache.commons.logging.Log;  
    2. import org.apache.commons.logging.LogFactory;  
    3. public class CommonLogTest {  
    4.  private static Log log = LogFactory.getLog(CommonLogTest.class);  
    5.  //日志打印  
    6.  public static void main(String[] args) {  
    7.  log.error("ERROR");  
    8.  log.debug("DEBUG");  
    9.  log.warn("WARN");  
    10.  log.info("INFO");  
    11.  log.trace("TRACE");  
    12.  System.out.println(log.getClass());  
    13.  }  

    15.Validator

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

    1.验证日期

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

    2.表达式验证

    1. // 设置参数  
    2. boolean caseSensitive = false;  
    3. String regex1 = "^([A-Z]*)(?:\\-)([A-Z]*)*$"  
    4. String regex2 = "^([A-Z]*)$";  
    5. String[] regexs = new String[] {regex1, regex1};  
    6. // 创建验证  
    7. RegexValidator validator = new RegexValidator(regexs, caseSensitive);  
    8. // 验证返回boolean  
    9. boolean valid = validator.isValid("abc-def");  
    10. // 验证返回字符串  
    11. String result = validator.validate("abc-def");  
    12. // 验证返回数组  
    13. String[] groups = validator.match("abc-def"); 

    3.配置文件中使用验证

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

    4.验证类

    1. Excerpts from org.apache.commons.validator.RequiredNameTest  
    2. //加载验证配置文件  
    3. InputStream in = this.getClass().getResourceAsStream("validator-name-required.xml");  
    4. ValidatorResources resources = new ValidatorResources(in);  
    5. //这个是自己创建的bean 我这里省略了  
    6. Name name = new Name();  
    7. Validator validator = new Validator(resources, "nameForm");  
    8. //设置参数  
    9. validator.setParameter(Validator.BEAN_PARAM, name);  
    10. Map results = null;  
    11. //验证  
    12. results = validator.validate();  
    13. if (results.get("firstName") == null) {  
    14.  //验证成功  
    15. else {  
    16.  //有错误 int errors = ((Integer)results.get("firstName")).intValue();  }}
    17. }
      J2ME(Java2 Micro Edition,Java2平台的微型版),应用于移动、无线及有限资源的环境;J2SE(Java 2 Standard Edition,Java 2平台的标准版),应用于桌面环境;J2EE(Java 2Enterprise Edition,Java 2平台的企业版),应用于基于Java的应用服务器。Java 2平台的发布,是Java发展过程中最重要的一个里程碑,标志着Java的应用开始普及。

课课家教育

未登录

1