zoukankan      html  css  js  c++  java
  • 利用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功能还是不错的,特别是在多线程情况下的应用

  • 相关阅读:
    搭建ARL资产安全灯塔
    免杀技术发展史
    米酷CMS 7.0.4代码审计
    腾讯安全实习 应用运维安全面试
    Docker部署CTF综合性靶场,定时刷新环境
    西湖论剑2020MISC-Yusa_yyds
    (转)马云炮轰银行监管的解读
    ATT&CK 实战
    Docker环境复现利用Redis未授权访问漏洞 >> 批量扫描检测利用
    修改CH340芯片信息
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330222.html
Copyright © 2011-2022 走看看