链接:http://jingyan.baidu.com/article/215817f7d55b871edb14235b.html

最近在项目中接触到了BeanUtils.copyProperties(),之前没怎么用过这个方法,在网上搜索了一下,发现还有一个PropertyUtils.copyProperties()的方法,下面对这两个方法做一下总结。另外,在使用的时候,程序抛出了异常,经过分析得知,异常的原因是因为赋值的对象中有一个时间类型(该属相采用java.util.Date的类型),程序无法通过,下面主要分析这两个问题。

    1. 第一步: BeanUtils.copyProperties()与PropertyUtils.copyProperties()

      1、 通过反射将一个对象的值赋值个另外一个对象(前提是对象中属性的名字相同)。

      2、 BeanUtils.copyProperties(obj1,obj2); 经常闹混不知道是谁给谁赋值,无意中先到"后付前"这个词来帮助自己记忆这个功能。即将obj2的值赋值给obj1。

      3、 如果2中实例obj2为空对象,即值new了他的实例并没有赋值的话obj1对应的属性值也会被设置为空置。

      4、BeanUtils与PropertyUtils对比(这里对比copyProperties方法)

      PropertyUtils的copyProperties()方法几乎与BeanUtils.copyProperties()相同,主要的区别在于后者提供类型转换功能,即发现两个JavaBean的同名属性为不同类型时,在支持的数据类型范围内进行转换,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

      不支持java.util.Date转换,但支持java.sql.Date。如果开发中Date类型采用util而非sql.Date程序会抛出argument mistype异常。

       

    2.  

      第二步:扩展BeanUtils支持时间类型转换

      import java.lang.reflect.InvocationTargetException;
      import org.apache.commons.beanutils.BeanUtils;
      import org.apache.commons.beanutils.ConvertUtils;

      /**
      * 重写BeanUtils.copyProperties
      *
      * @author monkey
      */
      public class BeanUtilsExtends extends BeanUtils {
         static {
             ConvertUtils.register(new DateConvert(), java.util.Date.class);
             ConvertUtils.register(new DateConvert(), java.sql.Date.class);
         }

      public static void copyProperties(Object dest, Object orig) {
             try {
                 BeanUtils.copyProperties(dest, orig);
             } catch (IllegalAccessException ex) {
                 ex.printStackTrace();
             } catch (InvocationTargetException ex) {
                 ex.printStackTrace();
             }
         }
      }

      import java.text.ParseException;
      import java.text.SimpleDateFormat;
      import org.apache.commons.beanutils.Converter;

      /**
      * 重写日期转换
      *
      * @author houzhiqing
      */
      public class DateConvert implements Converter {

      public Object convert(Class arg0, Object arg1) {
             String p = (String) arg1;
             if (p == null || p.trim().length() == 0) {
                 return null;
             }
             try {
                 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                 return df.parse(p.trim());
             } catch (Exception e) {
                 try {
                     SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
                     return df.parse(p.trim());
                 } catch (ParseException ex) {
                     return null;
                 }
             }

      }

      }

      复写的想法是好的,只不过这个实现就太那啥了。。。。

【转】beancopy的替代方案的更多相关文章

  1. CSS3魔法堂:CSS3滤镜及Canvas、SVG和IE滤镜替代方案详解

    一.前言    IE特有的滤镜常常作为CSS3各种新特性的降级处理补充,而Adobe转向HTML5后与Chrome合作推出CSS3的Filter特性,因此当前仅Webkit内核的浏览器支持CSS3 F ...

  2. Microsoft Azure Point to Site VPN替代方案

    Microsoft Azure提供了Point to Site VPN,但有时候这并不能满足我们的需求,例如:Point to Site VPN是SSTP VPN,只能支持Window客户端拨入,而且 ...

  3. CSS3魔法堂:CSS3滤镜及Canvas、SVG和IE滤镜替代方案详解[转]

    一.前言    IE特有的滤镜常常作为CSS3各种新特性的降级处理补充,而Adobe转向HTML5后与Chrome合作推出CSS3的Filter特性,因此当前仅Webkit内核的浏览器支持CSS3 F ...

  4. Base: 一种 Acid 的替代方案

    原文链接: BASE: An Acid Alternative Pdf下载链接: Base 数据库 ACID,都不陌生:原子性.一致性.隔离性和持久性,这在单台服务器就能搞定的时代,很容易实现,但是到 ...

  5. udid替代方案

    转自http://www.cnblogs.com/zhulin/archive/2012/03/26/2417860.html UDID替代方案   背景: 大多数应用都会用到苹果设备的UDID号,U ...

  6. Windows应用替代方案接龙

    使开源软件的优势: 开源安全产品的开发.测试和发布过程完全是透明的,同时提供产品的源代码及部分的文档.通过阅读源代码,大家可以清楚地了解开源安全技术的工作原理和实现方法,在选择开源安全技术时更有把握, ...

  7. MEAN实践——LAMP的新时代替代方案(上)

    摘要:90 年代,LAMP 曾风靡一时,然而随着需求的变迁和数据流量的激增,LAMP 已不可避免的走下神坛.近日,在 MongoDB Blog 中,Dana Groce 介绍了一个基于新时代架构的实践 ...

  8. Android app Splash页的替代方案

    一般的App想要显示公司的log什么的,都会在启动的第一个页面显示,就是SplashActivity. 目前在看到一个替代SplashActivity的方案. 使用SplashActivity的时候, ...

  9. OpenSessionInViewFilter 的配置及替代方案(转)

    鸣谢:http://justsee.iteye.com/blog/1174999,http://blog.csdn.net/sunsea08/article/details/4545186 Sprin ...

随机推荐

  1. Great writers inspire

    William Shakespeare Beowulf (Anglo-Saxon) Jonathan Swift Stephen Duck William Blake George Elliot Ka ...

  2. Android 自动朗读(TTS)

    在Android应用中,有时候需要朗读一些文本内容,今天介绍一下Android系统自带的朗读TextToSpeech(TTS).自动朗读支持可以对指定文本内容进行朗读,还可以把文本对应的音频录制成音频 ...

  3. DotNetBar v12.4.0.2 Fully Cracked

    更新信息: http://www.devcomponents.com/customeronly/releasenotes.asp?p=dnbwf&v=12.4.0.2 如果遇到破解问题可以与我 ...

  4. 这个setDefaultCloseOperation写不写的区别是什么?

      2009-03-23 13:40提问者采纳   设置用户在此窗体上发起 "close" 时默认执行的操作.必须指定以下选项之一: DO_NOTHING_ON_CLOSE(在 W ...

  5. 一篇介绍jquery很好的

    本文基于jQuery1.7.1版本,是对官方API的整理和总结,完整的官方API见http://api.jquery.com/browser/ 0.总述 jQuery框架提供了很多方法,但大致上可以分 ...

  6. poj1080 dp

    //Accepted 200 KB 0 ms //dp //dp[i][j]表示s1用前i个,s2用前j个字符能得到的最大分数 //dp[i][j]=max(dp[i-1][j]+score[s1[i ...

  7. SecureCRT下的串口无法输入

    用串口配置交换机的时候,出现的问题: 用secureCRT建了一个串口COM1后,连接上开发板后,可以正确接受和显示串口的输出,但是按键输入无效. 解决方法: Session Options -> ...

  8. 使用Wireshark捕捉USB通信数据

    USB,是英文Universal Serial Bus(通用串行总线)的缩写,而其中文简称为“通串线”,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯.USB接口支持设备的即插即用和热插拔功能 ...

  9. Java Abstract Class

    在Baths-stomp里面的每个Fluent Interface Interactor Impl,都继承了MarketDataAccessor,which is an abstract class. ...

  10. 8、网页制作Dreamweaver(jQuery基础:安装、语法)

    在<网页制作Dreamweaver(悬浮动态分层导航)>中,运用到了jQuery的技术,轻松实现了菜单的下拉.显示.隐藏的效果,不必再用样式表一点点地修改,省去了很多麻烦,那么jQuery ...