BeanUtils.copyProperties与PropertyUtils.copyProperties用法及区别
转自:http://www.cnblogs.com/fayf/articles/1272982.html
一、简介:
BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。
二、用法:
BeanUtils是这个包里比较常用的一个工具类,这里只介绍它的copyProperties()方法。该方法定义如下:
如果你有两个具有很多相同属性的JavaBean,一个很常见的情况就是Struts里的PO对象(持久对象)和对应的ActionForm,例如 Teacher和TeacherForm。我们一般会在Action里从ActionForm构造一个PO对象,传统的方式是使用类似下面的语句对属性逐个赋值:
//得到TeacherForm TeacherForm teacherForm=(TeacherForm)form; //构造Teacher对象 Teacher teacher=new Teacher(); //赋值 teacher.setName(teacherForm.getName()); teacher.setAge(teacherForm.getAge()); teacher.setGender(teacherForm.getGender()); teacher.setMajor(teacherForm.getMajor()); teacher.setDepartment(teacherForm.getDepartment()); //持久化Teacher对象到数据库 HibernateDAO.save(teacher);
而使用BeanUtils后,代码就大大改观了,如下所示: //得到TeacherForm TeacherForm teacherForm=(TeacherForm)form; //构造Teacher对象 Teacher teacher=new Teacher(); //赋值 BeanUtils.copyProperties(teacher,teacherForm); //持久化Teacher对象到数据库 HibernateDAO.save(teacher);
如果Teacher和TeacherForm间存在名称不相同的属性,则BeanUtils不对这些属性进行处理,需要程序员手动处理。例如 Teacher包含modifyDate(该属性记录最后修改日期,不需要用户在界面中输入)属性而TeacherForm无此属性,那么在上面代码的 copyProperties()后还要加上一句:
怎么样,很方便吧!除BeanUtils外还有一个名为PropertyUtils的工具类,它也提供copyProperties()方法,作用与 BeanUtils的同名方法十分相似,主要的区别在于后者提供类型转换功能,即发现两个JavaBean的同名属性为不同类型时,在支持的数据类型范围内进行转换,而前者不支持这个功能,但是速度会更快一些。BeanUtils支持的转换类型如下:
这里要注意一点,java.util.Date是不被支持的,而它的子类java.sql.Date是被支持的。因此如果对象包含时间类型的属性,且希望被转换的时候,一定要使用java.sql.Date类型。否则在转换时会提示argument mistype异常。
三、优缺点:
Apache Jakarta Commons项目非常有用。我曾在许多不同的项目上或直接或间接地使用各种流行的commons组件。其中的一个强大的组件就是BeanUtils。我 将说明如何使用BeanUtils将local实体bean转换为对应的value 对象:
上面的代码从aLocal对象复制属性到aValue对象。它相当简单!它不管local(或对应的value)对象有多少个属性,只管进行复制。我们假设 local对象有100个属性。上面的代码使我们可以无需键入至少100行的冗长、容易出错和反复的get和set方法调用。这太棒了!太强大了!太有用 了!
现在,还有一个坏消息:使用BeanUtils的成本惊人地昂贵!我做了一个简单的测试,BeanUtils所花费的时间要超过取数 据、将其复制到对应的 value对象(通过手动调用get和set方法),以及通过串行化将其返回到远程的客户机的时间总和。所以要小心使用这种威力!
转载于:https://www.cnblogs.com/wangpei/archive/2012/02/09/2344183.html
BeanUtils.copyProperties与PropertyUtils.copyProperties用法及区别相关推荐
- BeanUtils.copyProperties VS PropertyUtils.copyProperties
1. 通过反射将一个对象的值赋值个另外一个对象(前提是对象中属性的名字相同). 2. BeanUtils.copyProperties(obj1,obj2); 经常闹混不知道是谁给谁赋值,无意中先到& ...
- PropertyUtils.copyProperties和BeanUtils.copyProperties使用区别
位于org.apache.commons.beanutils包里面的这两个参数拷贝方法可以复制一个对象中相同名字的参数值到另一个对象,能简化很多代码,但是这两个copy方法使用起来有很大区别. /** ...
- @ini_get php,php中get_cfg_var()和ini_get()的用法及区别_php技巧_脚本之家
本文实例讲述了php中get_cfg_var()和ini_get()的用法及区别.分享给大家供大家参考.具体分析如下: php里get_cfg_var()和ini_get()都是取得配置值的函数,当你 ...
- return true Java_[Java教程]js中return,return true,return false的用法及区别
[Java教程]js中return,return true,return false的用法及区别 0 2015-11-16 23:00:03 1.语法及返回方式 ①返回控制与函数结果 语法为:retu ...
- 【Java学习笔记之二十九】Java中的equals和==的用法及区别
Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String(&quo ...
- python ord()与chr()用法以及区别
python ord()与chr()用法以及区别 原文:http://blog.csdn.net/yulock/article/details/52904035 ord()函数主要用来返回对应字符的a ...
- matlab ezplot fplot,【转】Matlab plot fplot ezplot用法与区别
[转]Matlab plot fplot ezplot用法与区别 (2012-04-19 20:26:00) 标签: matlab fplot ezplot 数学函数 曲线 杂谈 函数plot 是绘制 ...
- TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别
TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...
- Spring中@Resource与@Autowired、@Qualifier的用法与区别
Spring中@Resource与@Autowired.@Qualifier的用法与区别 1.@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法 ...
最新文章
- oracle从备份归档日志的方法集中回收
- 教你如何在 Linux 上为 SSH 登录设置电子邮件提醒
- oracle导入与导出,oracle导入与导出
- vue打包路径.html问题,如何解决vue.js打包报错问题
- 深度学习tensorflow框架的会话
- FPGA控制AD7768采集
- 动易软件上传文件服务器错误,动易 应用程序中的服务器错误
- java conditionobject_Java AbstractQueuedSynchronizer源码阅读4-ConditionObject
- hdu4135容斥原理 组合遍历
- 【转】SQLServer 行列互换
- grep正则表达式详解及练习
- 宁波大学计算机专硕分数线,2019宁波大学研究生分数线汇总(含2016-2019历年复试)...
- (转)向浑水(Muddy Waters Research)学习如何调查公司
- 《前端工具系列》最好用的git可视化工具——SourceTree
- 计算机word大作业,计算机操作基础--Word大作业要求.doc
- java猜数字1到100_Java实现简单猜数字小游戏
- 【第四章-2】Python爬虫教程(协程,多任务异步协程,aiohttp模块,异步爬虫实战:爬取《西游记》全部章节内容)
- utc时间 单位换算_UTC时间和GMT时间 | 圈里圈外
- vue中关于生产evn.production 及开发evn.development 的环境配置说明
- LaTex(PART IV) 各级标题
热门文章
- #1403 : 后缀数组一·重复旋律 (可重叠最长重复K次子串问题)
- 详细讲述MySQL中的子查询操作
- android 补间动画有停顿,Android动画原理分析(一)----补间动画
- android10热点验证身份,在 Android 上使用 Microsoft 进行身份验证
- viwer连接不到服务器 vnc_vnc viewer连不上怎么办 vnc viewer连不上的解决方法
- 关于华为海思Hi35XX系列开发的思考与总结
- ubuntu-chmod与chown命令
- 批量绑定(bulk binds):FOR循环与FORALL的性能比较
- 【最新】docker 安装elasticsearch + kibana步骤【第二篇_kibana】
- [BZOJ4259]残缺的字符串