BeanUtils.copyProperties(A,B)使用注意事项
***最近项目中用到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;(常用)
具体赋值情况,可以参考两个包下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
BeanUtils.copyProperties(A,B)使用注意事项的更多相关文章
- BeanUtils.copyProperties的使用方法
BeanUtils.copyProperties的使用方法 1.使用的是springframe包下的,BeanUtils.copyProperties(a,b) 把a属性拷贝给b属性 2.注意事项: ...
- BeanUtils.copyProperties()方法和PropertyUtils.copyProperties()的区别
首先两者来源于同一个包: import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.Prop ...
- BeanUtils.copyProperties() 用法
BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处 ...
- java 使用BeanUtils.copyProperties(Object source,Object target) 复制字段值
BeanUtils.copyProperties(person, wsPerson);把person的字段值,复制给wsPerson // 只复制两个实体中,字段名称一样的 很有用的一个功能...
- BeanUtils.copyProperties() 用法--部分转
把一个类对象copy到另一个类对象(这两个可以不同). 1.org.apache.commons.beanutils.BeanUtils.copyProperties(dest, src) org.s ...
- BeanUtils.copyProperties与PropertyUtils.copyProperties用法及区别
一.简介: BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean 通常包含了大量的属性,很多情况下,对Jav ...
- BeanUtils.copyProperties()方法引入不同包
两个对象之间拷贝相同的属性,可以使用BeanUtils.copyProperties()方法, BeanUtils.copyProperties(obj1,obj2); 提示有三个包可选. A,选择o ...
- BeanUtils.copyProperties VS PropertyUtils.copyProperties
作为两个bean属性copy的工具类,他们被广泛使用,同时也很容易误用,给人造成困然:比如:昨天发现同事在使用BeanUtils.copyProperties copy有integer类型属性的bea ...
- 小知识点BeanUtils.copyProperties
通过BeanUtils.copyProperties可以时间拷贝对象中的值,下面的new String[]{"cid","agreeFlag"," ...
随机推荐
- “ORA-06550: 第 1 行, 第 7 列”解决方法
将本机能正常运行的维修生产日志代码发布到公司内测环境里无法正常运行,报错如下: execute() - pls–QuartzJob.java–quartzjob 开始执行! java.sql.SQLE ...
- [osg]OSG相机添加动画路径
查看osg坐标系,camare默认姿态:http://www.cnblogs.com/lyggqm/p/8073688.html 首先搞清楚osg的坐标系以及osg::camare的默认姿态 下代码面 ...
- SpringBoot获取全局配置文件的属性以及@ConfigurationProperties实现类型安全的配置
在SpringBoot,可以定义一个全局配置文件,全局配置文件有两种形式: 1). application.properties 2).application.yml 二者的后缀名不同,编辑的格式也不 ...
- leecode第二十一题(合并两个有序链表)
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...
- 学习笔记14—Python error集
1.Can't broadcast input array from shape (3,1) into shape (3,) resolution: V[k:m,k] = v; v has sh ...
- centos 7 安装jdk1.8
首先下载jdk1.8 去官网下载jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151. ...
- java web 方面
1.Tomcat的优化经验. 2.http请求的GET与POST方式的区别. (1)get是从服务器上获取数据,post是向服务器传送数据. (2)get是把参数数据队列加到提交表单的ACTION属性 ...
- python logging日志输出个文件中
# -*- coding:utf-8 -*- import logging # 引入logging模块 import os.path import time # 第一步,创建一个logger logg ...
- (转)C# Delegate.Invoke、Delegate.BeginInvoke
Delegate的Invoke.BeginInvoke 1.Delegate.Invoke (委托同步调用) a.委托的Invoke方法,在当前线程中执行委托. b.委托执行时阻塞当前线程,知道委托执 ...
- 20165303 预备作业3 Linux安装及学习
=20165303 预备作业3 Linux安装及学习 安装虚拟机 按照http://www.cnblogs.com/rocedu/p/6012545.html步骤进行逐步操作,安装虚拟机. 遇到的问题 ...