利用EZMorph复制bean

 利用EZMorph复制Bean

 

引子

    众所周知,在java中对象之间的赋值是地址引用关系,如:

  1. A a = new A();
  2. A b = a;

则修改b的属性,a的属性也会跟着修改。

       在很多场合下,我们希望克隆出一个新的对象出来,新对象的修改不会影响原有对象,这时我们一般常用的有如下两种方式:

  • 使对象实现Cloneable接口,这个只适用于我们自己的java对象
  • 使用jakatar commons的BeanUtils实现bean copy

     昨晚看到一个新的组件:EZMorph,可以实现同样的功能,这里简单介绍一下。

      EZMorph据说起源于json,后来独立出来了,有兴趣的可以到官网(http://ezmorph.sourceforge.net/)上浏览一下。

EZMorph的主要原理

    若要将A的属性赋给B,则经过如下步骤:

  • new一个B的实例
  • 遍历A的属性
  • 若A有某个属性P1,B也有一个属性P1,则将A的P1的属性值赋给B的P1

代码示例

1. 先看几个简单类型的示例

 


2. 再看一下java.util.Calendar对象

 

注意:  morperRegistry.registerMorpher( new BeanMorpher( GregorianCalendar.class, morperRegistry ) );   

这里必须填写GregorianCalendar类型,如果用Calendar.class就会报出异常,因为EZMorph只能处理public类型的构造方法,而Calendar的构造方法是protected的。这种情况下,最好还是使用Calendar的clone功能

3. 再看一下,不同对象之间的赋值

Student类

 

Tearcher

 

将Student对象的name属性赋给Teacher对象的name中

 

输出结果为:

 

null

chb

 

 

可以看出Student和Teacher都有name属性,因此将属性值拷贝过来了,而Student没有id属性,因此Teacher对象的id属性值为空。

 

总结:对于Bean的copy功能还是不错的,特别是在多线程情况下的应用

 

 

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值