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

发表于:2019-5-09 11:09

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:javaGren    来源:头条科技

#
java
  前言
  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(“<?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);
  }
  }
  为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜! 关注我,私信回复我“资料”
  获取免费的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());
  }
  }
  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.配置文件中使用验证
   <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>
  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();
  }
 
      上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号