BeanUtils工具包是由Apache公司所开发,主要是方便程序员对Bean类能够进行简便的操作。

BeanUtils一共分4个包:

org.apache.commons.beanutils

org.apache.commons.beanutils.converters

org.apache.commons.beanutils.locale

org.apache.commons.beanutils.locale.converters

其中需要我们特别关注的是这个org.apache.commons.beanutils包,其他包都是起辅助作用的。其中上面两个没有针对本地化的任何处理,执行效率高。下面两个对本地化有要求。

BeanUtils类

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

BeanUtils设置属性值的时候,如果属性是基本数据类型,那么BeanUtils会自动帮我们进行数据类型的转换,并且BeanUtils设置属性的时候也是依赖于底层的getter和setter方法。如果设置的属性值是其他的引用数据类型,此时必须要注册一个类型转换器才能实现自动的转换(参考下面的ConvertUtils)

常用方法:

cloneBean(Object bean)

对象的克隆

copyProperties(Object dest, Object orig)

对象的拷贝

copyProperty(Object bean, String name, Object value)

拷贝指定的属性值到指定的bean

setProperty(Object bean, String name, Object value)

设置指定属性的值

populate(Object bean, Map<String,? extends Object> properties)

将map数据拷贝到javabean中(map的key要与javabean的属性名称一致)

注:copyProperty与setProperty,日常使用时推荐copyProperty。如果我们需要自定义实现populate()方法,那么我们可以override setProperty()方法.

示例:

// JavaBean
public class Animal {private String name;private int age;private String color;private String sex;public Animal() {}getXxx和setXxx省略……}
/*** BeanUtils*/
@Test
public void test1() throws Exception {Map<String, Object> map = new HashMap<String, Object>();map.put("name", "tuantuan");map.put("age", 3);map.put("color", "black");map.put("sex", "female");// 将map数据拷贝到javabean中Animal a1 = new Animal();BeanUtils.populate(a1, map);System.out.println(a1); // Animal [name=tuantuan, age=3, color=black, sex=female]// 对象的拷贝Animal a2 = new Animal();BeanUtils.copyProperties(a2, a1);System.out.println(a2);// Animal [name=tuantuan, age=3, color=black, sex=female]// 拷贝指定的属性Animal a3 = new Animal();BeanUtils.copyProperty(a3, "name", "yuanyuan");System.out.println(a3); // Animal [name=yuanyuan, age=0, color=null, sex=null]// 设置指定的属性BeanUtils.setProperty(a3, "sex", "male");System.out.println(a3); // Animal [name=yuanyuan, age=0, color=null, sex=male]// 克隆对象Object object = BeanUtils.cloneBean(a3);System.out.println(object); // Animal [name=yuanyuan, age=0, color=null, sex=male]
}

ConvertUtils

这个工具类的职能是在字符串和指定类型的实例之间进行转换。 实际上,BeanUtils是依赖ConvertUtils来完成类型转换,但是有时候我们可能需要自定义转换器来完成特殊需求的类型转换;

主要方法:

convert(Object value, Class<?> targetType)

将给定的value转换成指定的Class类型

// 将整型转换成字符串
Object object = ConvertUtils.convert(123, String.class);
String typeName = object.getClass().getTypeName();
System.out.println(typeName);// 将日期转换成字符串
Object object2 = ConvertUtils.convert(new Date(), String.class);
String typeName2 = object2.getClass().getTypeName();
System.out.println(typeName2);// 将字符串转换成Double
Object object3 = ConvertUtils.convert("123", Double.class);
String typeName3 = object3.getClass().getTypeName();
System.out.println(typeName3);

自定义类型转换:

自定义转换器,实现Converter接口,重写convert方法

class MyConverter implements Converter {private static SimpleDateFormat format;public MyConverter(String pattern) {format = new SimpleDateFormat(pattern);}@Overridepublic Object convert(Class type, Object value) {if (value == null) {return null;}if (value instanceof String) {String tmp = (String) value;if (tmp.trim().length() == 0) {return null;} else {try {return format.parse(tmp);} catch (ParseException e) {e.printStackTrace();}}} else {throw new ConversionException("not String");}return value;}
}

使用:

MyConverter converter = new MyConverter("yyyy-MM-dd HH:mm:ss");
// 注册该转换器
ConvertUtils.register(converter, Date.class);
Object object3 = ConvertUtils.convert("2017-11-29 14:04:00", Date.class);
System.out.println(object3.getClass().getTypeName());
System.out.println(object3);
// BeanUtils设置属性时,自动进行类型转换
MyConverter converter = new MyConverter("yyyy-MM-dd HH:mm:ss");
// 注册该转换器
ConvertUtils.register(converter, Date.class);
Animal a5 = new Animal();
BeanUtils.copyProperty(a5, "birth", "2017-11-29 14:04:00");
System.out.println(a5);// Animal [name=null, age=0, color=null, sex=null, birth=Wed Nov 29 14:04:00 CST 2017]

PropertyUtils

BeanUtils与PropertyUtils这两个类几乎有一摸一样的功能,唯一的区别是:BeanUtils在对Bean赋值是会进行类型转化。

举例来说也就是在copyProperty时只要属性名相同,就算类型不同,BeanUtils也可以进行copy;而PropertyBean则可能会报错!!当然2个Bean之间的同名属性的类型必须是可以转化的,否则用BeanUtils一样会报错。若实现了org.apache.commons.beanutils.Converter接口则可以自定义类型之间的转化。由于不做类型转化,用PropertyUtils在速度上会有很大提高!

CollectionUtils

利用这个工具类,我们对集合进行修改、查询、过滤等操作

CollectionUtils属于commons-collections包

String[] arrA = new String[] { "1", "2", "3" };
String[] arrB = new String[] { "1", "a", "b" };
List<String> listA = Arrays.asList(arrA);
List<String> listB = Arrays.asList(arrB);// 判断集合是否为 空
System.out.println(CollectionUtils.isEmpty(listA));// false
System.out.println(CollectionUtils.isEmpty(listB));// false// 判断集合是否为 不为空
System.out.println(CollectionUtils.isNotEmpty(listA));// true
System.out.println(CollectionUtils.isNotEmpty(listB));// true// 两个集合的比较
System.out.println(CollectionUtils.isEqualCollection(listA, listB));// false// 集合的操作
// 取并集
System.out.println(CollectionUtils.union(listA, listB));// [1, a, 2, b, 3]
// 取交集
System.out.println(CollectionUtils.intersection(listA, listB));// [1]
// 取交集的补集
System.out.println(CollectionUtils.disjunction(listA, listB));// [a, 2, b, 3]
// 取集合相减
System.out.println(CollectionUtils.subtract(listA, listB));// [2, 3]
System.out.println(CollectionUtils.subtract(listB, listA));// [a, b]List<String> listC = new ArrayList<>();
listC.add("1");
listC.add("2");
listC.add("3");
String[] arrC = { "4", "5", "6" };
// 向集合中添加值
CollectionUtils.addAll(listC, arrC);
System.out.println(listC);// [1, 2, 3, 4, 5, 6]

备注:

整理的不完善,待后期完善

apache-commons之BeanUtils、ConvertUtils、PropertyUtils、CollectionUtils的基本使用相关推荐

  1. java实例拷贝,Apache Commons包 BeanUtils 对象拷贝实例demo

    Apache Commons包 BeanUtils 对象拷贝实例demo 发布时间:2019-05-08作者:laosun阅读(1846) Apache Commons包 BeanUtils 对象拷贝 ...

  2. 一篇关于apache commons类库的详解

    1.1. 开篇 在Java的世界,有很多(成千上万)开源的框架,有成功的,也有不那么成功的,有声名显赫的,也有默默无闻的.在我看来,成功而默默无闻的那些框架值得我们格外的尊敬和关注,Jakarta C ...

  3. apache commons collections CollectionUtils工具类简单使用

    CollectionUtils提供很多对集合的操作方法,常用的方法如下 不仅可以判断Collection集合类,还可以判断JSONArray是否为空. import org.apache.common ...

  4. Java猿社区—Apache Commons Collections—CollectionUtils工具类详解

    欢迎关注作者博客 简书传送门 文章目录 前言 代码示例 前言 论阅读源码的重要性,后期会对各大开源框架相关源码做详细阅读,并熟悉使用,本次主要对Apache Commons Collections中C ...

  5. Apache Commons 工具类介绍及简单使用(转)

    转自:http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下 ...

  6. 常用工具类 (一) : Apache Commons 常用工具类整理 (全)

    文章目录 一.commons-lang3 引入依赖 StringUtils 字符串工具类 StringEscapeUtils 转义字符串工具类 NumberUtils 数字工具类 ArrayUtils ...

  7. Apache Commons 工具类介绍及简单使用

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...

  8. Apache Commons工具集简介

    文章出处 Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils ...

  9. apache commons常用工具类

    1.有些情况下,Arrays满足不到你对数组的操作?不要紧,ArrayUtils帮你 ArrayUtils public class TestMain {  public static void ma ...

  10. 常用Apache Commons工具类备忘

    常用Apache Commons工具类 ----------------------------------------------------------------- 例如:commons.lan ...

最新文章

  1. 很用心的写了 9 道 MySQL 面试题
  2. 【JUC并发编程04】线程间定制化通信(单标志法存在的问题)
  3. Python 数据分析与展示笔记2 -- 图像手绘效果
  4. Qt Assistant快速指南
  5. jvm回收垃圾_没有垃圾回收的JVM
  6. C语言转义字符的使用
  7. (108)FPGA面试题-介绍STA静态时序分析及其作用
  8. 《如何搭建小微企业风控模型》第六节节选 特征工程(下)
  9. mac上使用终端生成RSA公钥和密钥
  10. 网易发“暴力裁员”内部说明;京东负责不幸员工的孩子费用到22岁;Linux kernel 5.4发布 | 极客头条...
  11. 试用阿里开源的Arthas小记
  12. 2013-2018卷积神经网络中十个最重要的概念与创新
  13. js代码格式化工具(简单格式化,显示进度条)
  14. 这可能是最全的JAVA入门教程 ~
  15. RockWare RockWorks 17.0.0 1CD地表数据可视化软件
  16. nginx 502错误原因及解决办法
  17. java 7zip分卷压缩_7zip分卷压缩,rar分卷压缩文件
  18. 记事本改字体的代码java_记事本编程切换字体颜色 用java编写一个记事本程序
  19. 《C++ Primer Plus》(第6版)第3章编程练习
  20. Qt对话框的事件循环分析(子线程中不能创建UI窗体分析2)

热门文章

  1. 接口测试 Jmeter面试题
  2. 免费的天气API相关编码(中国城市代码检索)
  3. C语言打印ASCII码
  4. matlab画图plot以及自动保存图像
  5. Maven下载安装旧版本
  6. 浏览器趋势2016年9月:浏览器大战结束了吗?
  7. MFC Windows 程序设计[五]之绘制表格Accel
  8. 磁盘阵列卡 远程监控(MegaRAID Storage Manager)(一)
  9. android Camera摄像头竖屏显示
  10. 汉字计算机编码是谁发明的,神奇的汉字编码,了解一下