作为两个bean属性copy的工具类,他们被广泛使用,同时也很容易误用,给人造成困然;比如:昨天发现同事在使用BeanUtils.copyProperties copy有integer类型属性的bean时,

没有考虑到会将null转换为0,而后面的业务依赖于null来判断,导致业务出错。下面总结一下主要的注意点:

  • 大范围两个工具类都是对两个bean之前存在name相同的属性进行处理,无论是源bean或者目标bean多出的属性均不处理。

  • 具体到BeanUtils是相同name并且类型之间支持转换的属性可以处理,而PropertyUtils不支持类型转换必须是类型和name一样才处理。

  • 对null的处理:PropertyUtils支持为null的场景;BeanUtils对部分属性不支持null的情况,具体为下:

1)、date类型不支持:异常 dateorg.apache.commons.beanutils.ConversionException: No value

specified for 'Date'

2)、Ineger、Boolean、Long等不支持: 转为0;

3)、string:支持,保持null;

  • 关于类型转换的例子:

源bean有属性:   private Long    dateVal;

目标bean有属性:private Date    dateVal;

使用 PropertyUtils,会保错:Caused by: java.lang.IllegalArgumentException: argument type mismatch

使用BeanUtils,则相当于new date(dateVal),网上传言java.util.Date不支持,就测试来说无论是 sql

util 都是ok

  • 对于自定义的对象类型属性  都是浅copy :

比如都有属性:private Base  base;   Base有一个属性String Test;

new.getBase().setTest("new");

那么old.getBase().getTest()也为new

  • 性能:get,set《PropertyUtils《BeanUtils
  • BeanUtils的高级功能org.apache.commons.beanutils.Converter接口可以自定义类型之间的转化。PropertyUtils没有。

BeanUtils.copyProperties(A,B);

如果B中的Integer类型的数据是null的,那么通过这个方法复制给A后,这个null的Integer数据会变成0。

也就是它有自己的规则,如果发现Integer类型的数据如果是null的,它会自作多情的给个默认值!

这个自作多情是很让开发人员反感的!比如Integer类型的数据=null是一个逻辑业务,但是经过复制后之前的业务逻辑就不执行了!!!

解决方法:使用PropertyUtils.copyProperties(A,B),注:数据类型里面有data类型的可能会存在问题

BeanUtils.copyProperties VS PropertyUtils.copyProperties的更多相关文章

  1. BeanUtils.copyProperties与PropertyUtils.copyProperties用法及区别

    一.简介: BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean 通常包含了大量的属性,很多情况下,对Jav ...

  2. BeanUtils.copyProperties和PropertyUtils.copyProperties的使用区别

    http://caoyaojun1988-163-com.iteye.com/blog/1871316

  3. BeanUtils.copyProperties()方法和PropertyUtils.copyProperties()的区别

    首先两者来源于同一个包: import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.Prop ...

  4. PropertyUtils.copyProperties(); java.lang.NullPointerException可能产生的原因

    PropertyUtils.copyProperties(Object dest, Object orig); 出现空指针异常可能产生的原因(不一定准确):java.lang.NullPointerE ...

  5. Spring BeanUtils 的对象复制 copyProperties

    Spring提供了一个非常棒的对象复制方法, 其参数的顺序和apache commons提供的同名方法是不一样的, 这个要小心. 源码 public static void copyPropertie ...

  6. 【转】beancopy的替代方案

    链接:http://jingyan.baidu.com/article/215817f7d55b871edb14235b.html 最近在项目中接触到了BeanUtils.copyProperties ...

  7. Apache的对象复制详解

    BeanUtils.copyProperties 和 PropertyUtils.copyProperties 两个工具类都是对两个bean之前存在name相同的属性进行处理,无论是源bean或者目标 ...

  8. BeanUtils.copyProperties(A,B)使用注意事项

    ***最近项目中用到BeanUtils.copyProperties(),然后踩了一些坑,也在网上查看了很多同行的测试和总结,现在将自己的测试.整理的注意事项分享如下,希望大家一起学习进步. ***注 ...

  9. BeanUtils.copyProperties()

    BeanUtils.copyProperties() PropertyUtils.copyProperties() 通过反射将一个对象的值赋值个另外一个对象(前提是对象中属性的名字相同). 后付前 P ...

随机推荐

  1. 下拉菜单制作——利用CSS实现的一个实例

    本文实现了一个经典的下拉菜单的制作. 首先,写出Html部分: <!DOCTYPE html> <html> <head> <meta charset=&qu ...

  2. hdu2612 Find a way BFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612 思路: 裸的BFS,对于Y,M分别进行BFS,求出其分别到达各个点的最小时间: 然后对于@的点, ...

  3. sql查询优化整理

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  4. 在Caffe上运行Cifar10示例

    准备数据集 在终端上运行以下指令: cd caffe/data/cifar10 ./get_cifar10.sh cd caffe/examples/cifar10 ./create_cifar10. ...

  5. Mybatis中的like查询

    今天要做一个模糊查询 用的Mybatis 开始写的是: select id,bookName,author,publisher,donor,status,createDate,lastUpdate f ...

  6. 【wannacry病毒之暗网】-如何访问"暗网"(慎入)

    心里能力不强的人,请别看. 有些事情还是不要接触比较好, 社会最恶一面不是随随便便就能接触到的, 也不是你能理解的 你想要用暗网做什么是你考虑的一个问题 什么是暗网? 所谓的"暗网" ...

  7. JSP----获取表单参数

    在页面中可大量使用 request 对象来获取表单域的值,获取表单域的值有如下两个 方法. • String getParamete(String para mN ame): 获取表单域的值. • S ...

  8. Regression:Generalized Linear Models

    作者:桂. 时间:2017-05-22  15:28:43 链接:http://www.cnblogs.com/xingshansi/p/6890048.html 前言 本文主要是线性回归模型,包括: ...

  9. sublime比较好用的插件

    emmet, markdown preview, package Control, SFTP, Anaconda

  10. UITextField关闭自动联想功能

    在textField输入内容时,如果内容为英文,输入的英文如果不正确的单词就是有红色的线报警,关闭英文自动联想功能 self.autocorrectionType = UITextAutocorrec ...