Apache Commons 工具类大家都有用过,但是可能缺乏系统学习,只用到了一小部分功能,无法发挥极限的价值,大白话说就是,一颗好白菜都让猪给拱了!
代码过多,手机观看效果不佳,建议收藏后在电脑上静悄悄地看。因内容健康,可大胆转发,即使未满十八岁,在没有家长陪同下也一样可以观看!
提供了对于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)
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等多个知识点的架构视频学习资料以及电子书资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!
提供了一些公共的编解码实现,比如Base64, Hex, MD5,Phonetic and URLs等等
commons compress中的打包、压缩类库。
用来帮助处理配置文件的,支持很多种存储方式。
Properties filesXML documentsProperty list files (.plist)JNDIJDBC DatasourceSystem propertiesApplet parametersServlet parameters
(Database Connection Pool)是一个依赖Jakarta commons-pool对象池机制的数据库连接池,Tomcat的数据源使用的就是DBCP。
提供的一个开源的API,是对javamail的封装。
java web文件上传功能。
基于HttpCore实 现的一个HTTP/1.1兼容的HTTP客户端,它提供了一系列可重用的客户端身份验证、HTTP状态保持、HTTP连接管理module。
对http://java.io的扩展 操作文件非常方便。
主要是一些公共的工具集合,比如对字符、数组的操作等等。
提供的是一个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.验证日期
// 获取日期验证 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(); }
领取专属 10元无门槛券
私享最新 技术干货