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

1原文地址;https://blog.csdn.net/qq_33623197/article/details/79731809

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

***注意:本篇还有很多没有研究到的地方,如果各位需要使用BeanUtils的功能,还需要根据自身情况多加测试,验证。任何第三方的工具未经调研、测试和验证,都是有风险的,你我共勉!

BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。

【开宗明义】

1.无论是org.springframework.beans或者org.apache.commons.beanutils,与get/set方式相比,都存在性能问题。

2.效率由高到底:get/set 》PropertyUtils 》BeanUtils。

3.PropertyUtils和BeanUtils两个工具类都是对bean之间存在属性名相同的属性进行处理,无论是源bean或者是目标bean中多出来的属性均不处理。

4.具体来说:

BeanUtils.copyProperties()可以在一定范围内进行类型转换,同时还要注意一些不能转换时候,会将默认null值转化成0;

Property.copyProperties()则是严格的类型转化,必须类型和属性名完全一致才转化。

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

a.  java.util.Date类型不支持,但是它的自雷java.sql.Date是被支持的。java.util.Date直接copy会报异常;

b.  Boolean,Integer,Long等不支持,会将null转化为0;

c.  String支持,转化后依然为null。

4.BeanUtils的高级功能org.apache.commons.beanutils.Converter接口可以自定义类型转化,也可以对部分类型数据的null值进行特殊处理,如ConvertUtils.register(new DateConverter(null), java.util.Date.class);但是PropertyUtils没有。

另外:值得注意的是,在测试过程中发现,commons-beanutils-1.8.0.jar版本中的BeanUtils类,支持Byte到Integer或int的转化。说明实际使用过程中,我们还是要多看源码,多做测试,并且注意版本号升级带来的微小变化。

【详细说明】

1、package org.springframework.beans;中的
     BeanUtils.copyProperties(A,B);
     是A中的值付给B

2、package org.apache.commons.beanutils;(常用)

BeanUtils.copyProperties(A,B);

是B中的值付给A

具体赋值情况,可以参考两个包下copyProperties源码查看。

3.org.apache.commons.beanutils下的BeanUtils支持的类型转化列表:

* java.lang.BigDecimal   
 
* java.lang.BigInteger   
 
* boolean and java.lang.Boolean   
 
* byte and java.lang.Byte   
 
* char and java.lang.Character   
 
* java.lang.Class   
 
* double and java.lang.Double   
 
* float and java.lang.Float   
 
* int and java.lang.Integer   
 
* long and java.lang.Long   
 
* short and java.lang.Short   
 
* java.lang.String   
 
* java.sql.Date   
 
* java.sql.Time   
 
* java.sql.Timestamp

原文地址:https://www.cnblogs.com/xinglongbing521/p/10145440.html

时间: 2024-08-30 14:59:03

BeanUtils.copyProperties(A,B)使用注意事项的相关文章

BeanUtils.copyProperties方法,当属性Date为null解决

问题描述:org.apache.commons.beanutils user对象和formBean对象都有属性birthday,而且都是java.sql.Date类型的 当进行BeanUtils.copyProperties(user,formBean);复制属性时候,formBean中属性birthday为null,那么就会出现如下异常 解决方法 在BeanUtils.copyProperties(user,formBean);前加上一行代码: BeanUtilsBean.getInstanc

BeanUtils.copyProperties() 用法

BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度. 如果你有两个具有很多相同属性的JavaBean,一个很常见的情况就是Struts里的PO对象(持久对象)和对应的ActionForm.例如:一个用户注册页面,有一个User实体类和一个UserActionForm,我们一般会在Act

(转载)BeanUtils.copyProperties() 用法

BeanUtils.copyProperties() 用法 标签: hibernateuserjdbc数据库strutsjava 2009-10-17 23:04 35498人阅读 评论(6) 收藏 举报  分类: struts1.x(14)  一.简介: BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代

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

首先两者来源于同一个包: import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.PropertyUtils; 千万不要导包错误,否者会报异常. BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码

BeanUtils.copyProperties VS PropertyUtils.copyProperties

作为两个bean属性copy的工具类,他们被广泛使用,同时也很容易误用,给人造成困然:比如:昨天发现同事在使用BeanUtils.copyProperties copy有integer类型属性的bean时, 没有考虑到会将null转换为0,而后面的业务依赖于null来判断,导致业务出错.下面总结一下主要的注意点: 大范围两个工具类都是对两个bean之前存在name相同的属性进行处理,无论是源bean或者目标bean多出的属性均不处理. 具体到BeanUtils是相同name并且类型之间支持转换的

【转】关于BeanUtils.copyProperties的用法和优缺点

一.简介:  BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度. 二.用法:  BeanUtils是这个包里比较常用的一个工具类,这里只介绍它的copyProperties()方法.该方法定义如下: Java代码 public static void copyProperties(j

spring boot注解,BigDecimal比较,BeanUtils.copyProperties()用法

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 12.0px "Helvetica Neue"; color: #454545 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 12.0px ".PingFang SC"; color: #454545 } span.s1 { font: 12.

关于BeanUtils.copyProperties()用法和区别

这两个类在不同的包下面,而这两个类的copyProperties()方法里面传递的参数赋值是相反的. 例如: a,b为对象 BeanUtils.copyProperties(a, b); 1.BeanUtils是org.springframework.beans.BeanUtils, a拷贝到b public static void copyProperties(Object source, Object target)//source 源文件,target 目标文件 throws BeansE

BeanUtils.copyProperties(A,B)字段复制

BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度. 注意:属性复制,不同jar中的方法,用法不一样. 1.package org.springframework.beans;中的 BeanUtils.copyProperties(A,B); 是A中的值付给B FinCpDocDO f