`
huibin
  • 浏览: 757463 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

利用EZMorph复制Bean

    博客分类:
  • JAVA
阅读更多

 

 

 

JavaScript Optimizer-JSO这个项目用于在服务器端管理你的JavaScript和CSS资源,以减少服务器与浏览器之间传输的数据量。提供的功能包括:压缩、合并、缓存、重新组合JavaScript和CSS文件

EZMorph是一个简单的java类库用于将一种对象转换成另外一种对象。EZMorph原先是Json-lib项目中的转换器。EZMorph支持原始数据类型(Primitive),对象(Object),多维护数组转换与DynaBeans的转换。兼容JDK1.3.1,整个类库大小只有76K左右。

官方网站:http://ezmorph.sourceforge.net/

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

A a = new A();
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. 先看几个简单类型的示例

        int i = new IntMorpher().morph("123");
        Assert.assertEquals(123, i); // true!

        String str = (String) StringMorpher.getInstance().morph(new Integer(123));
        Assert.assertEquals("123", str); // true!

        Boolean[] bools = (Boolean[]) new ObjectArrayMorpher(new BooleanObjectMorpher()).morph(new String[] { "true", "false" });
        Assert.assertEquals(Boolean.TRUE, bools[0]); // true!
        Assert.assertEquals(Boolean.FALSE, bools[1]); // true!
        
        MorpherRegistry morperRegistry = new MorpherRegistry();   
        MorphUtils.registerStandardMorphers(morperRegistry);   
        Integer x = (Integer) morperRegistry.morph( Integer.class, "2" );   
        Assert.assertEquals( new Integer(2), x); //true!
2. 再看一下java.util.Calendar对象

        Calendar dynaBean = Calendar.getInstance();
        System.out.println(dynaBean.getTime());
        morperRegistry.registerMorpher( new BeanMorpher( GregorianCalendar.class, morperRegistry ) );   
        Calendar myBean = (Calendar) morperRegistry.morph( GregorianCalendar.class, dynaBean );
        
        myBean.add(Calendar.DATE, 1);
        System.out.println(dynaBean.getTime());
        System.out.println(myBean.getTime());
注意: morperRegistry.registerMorpher( new BeanMorpher( GregorianCalendar.class, morperRegistry ) );  

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

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

Student类

public class Student {
    private int age;
    private String name;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
}
Tearcher

public class Teacher {
    private String id;
    private String name;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

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

        Student student = new Student();
        student.setName("chb");
        morperRegistry.registerMorpher( new BeanMorpher(Teacher.class, morperRegistry ) );   
        Teacher teacher = (Teacher) morperRegistry.morph( Teacher.class, student );
        System.out.println(teacher.getId());
        System.out.println(teacher.getName());
总结:对于Bean的copy功能还是不错的,特别是在多线程情况下的应用

 


 
分享到:
评论

相关推荐

    json-lib net.sf.ezmorph.bean.MorphDynaBean cannot be cast to xxx

    标题中的“json-lib net.sf.ezmorph.bean.MorphDynaBean cannot be cast to xxx”是一个典型的Java运行时异常,通常发生在尝试将一个对象强制转换为其不兼容类型的实例时。在这个特定的情况下,`MorphDynaBean`是...

    java.lang.ClassNotFoundException: net.sf.ezmorph.MorpherRegistry

    Ezmorph库通常通过包含 `ezmorph-*.jar` 文件来引入项目中。 解决此类问题,你需要确保以下几个步骤已正确执行: 1. **检查依赖**:确认你的项目已经正确地包含了Ezmorph库。如果你使用的是Maven或Gradle等构建...

    ezmorph-1.0.6 jar包

    在实际使用EZMorph时,开发者首先需要将ezmorph-1.0.6.jar添加到项目的类路径中,然后可以利用它的API来实现动态转型。例如,可以创建一个新的`MorpherRegistry`实例,注册需要的转换器,然后调用`morph()`方法来...

    ezmorph-1.0.2.jar

    因此,使用"ezmorph-1.0.2.jar"意味着开发者正在利用ezmorph项目的最新改进和增强。 标签"ezmorph"直接关联了这个JAR文件与ezmorph库的关系。ezmorph库的核心功能包括: 1. 动态对象映射:ezmorph允许在运行时创建...

    ezmorph-1.0.6.

    ezmorph-1.0.6.下ezmorph-1.0.6.下载ezmorph-1.0.6.下载ezmorph-1.0.6.下载ezmorph-1.0.6.下载ezmorph-1.0.6.下载ezmorph-1.0.6.下载ezmorph-1.0.6.下载ezmorph-1.0.6.下载

    ezmorph-1.0.3.jar

    ezmorph-1.0.3.jar

    ezmorph-1.0.6-API文档-中文版.zip

    赠送jar包:ezmorph-1.0.6.jar; 赠送原API文档:ezmorph-1.0.6-javadoc.jar; 赠送源代码:ezmorph-1.0.6-sources.jar; 包含翻译后的API文档:ezmorph-1.0.6-javadoc-API文档-中文(简体)版.zip 对应Maven信息:...

    包含ezmorph-1.0.5.jar

    5. **BeanMorpher**: BeanMorpher用于Java Bean对象之间的属性映射,它可以将源对象的属性值复制到目标对象上,实现对象间的深度拷贝。 6. **InheritanceMorpher**: 支持子类到父类的转换,这在处理多态数据时非常...

    ezmorph-1.0.6 包

    ezmorph是一个在Java环境中使用的库,专为对象到对象的转换设计。它的主要目标是简化数据绑定和对象的形态变化过程。在Java开发中,我们经常遇到需要将一种数据结构转化为另一种的情况,ezmorph就是这样一款工具,能...

    ezmorph-1.0.6.zip

    ezmorph-1.0.6.jar ezmorph是一个简单的java类库用于将一种对象转换成另外一种对象。ezmorph原先是Json-lib项目中的转换器。EZMorph支持原始数据类型(Primitive),对象(Object),多维数组转换与DynaBeans的转换...

    ezmorph-0.8.1.jar

    ezmorph-0.8.1.jar

    ezmorph-1.0.6.jar

    《ezmorph-1.0.6.jar:Java对象变形库的深度解析》 在Java开发领域,ezmorph库是一款极具实用性的工具,主要用于对象的转换和变形。ezmorph-1.0.6.jar是该库的一个版本,它包含了ezmorph的核心功能,能够帮助开发者...

    ezmorph.jar

    《ezmorph.jar——Java开发中的数据转换神器》 在Java开发中,我们常常会遇到数据类型转换的问题,尤其是在处理各种复杂的数据结构时。为了解决这些问题,开发者们引入了各种库,其中ezmorph.jar就是一个非常实用的...

    ezmorph-1.0.6-API文档-中英对照版.zip

    赠送jar包:ezmorph-1.0.6.jar; 赠送原API文档:ezmorph-1.0.6-javadoc.jar; 赠送源代码:ezmorph-1.0.6-sources.jar; 包含翻译后的API文档:ezmorph-1.0.6-javadoc-API文档-中文(简体)-英语-对照版.zip 对应...

    ezmorph-1.0.5.jar

    ezmorph-1.0.5.jar java

    java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher异常解决方法

    8. **工具辅助**:利用工具如 `jdeps` (Java Dependency Analysis Tool) 来检查项目依赖关系,确保所有依赖都得到了满足。 通过以上步骤,大多数情况下都能成功解决 `NoClassDefFoundError` 异常。如果问题依然存在...

    Json所需6个JAR包(net.sf.ezmorph.MorpherRegistry异常

    在处理JSON时,如果遇到`MorpherRegistry`异常,通常是因为缺少ezmorph相关的JAR包或者版本不匹配。`MorpherRegistry`是EZ Morph库中的一个重要类,负责管理和注册各种转换器(Morpher),以便将一种数据类型转换为...

    Json所需6个JAR包(net.sf.ezmorph.MorpherRegistry异常)所需要的java 包

    EZMorph库提供了一种方便的方式来转换Java对象,特别是当需要将非标准类型的对象转换为标准类型,如字符串、整数等时。`MorpherRegistry`是EZMorph中的一个关键类,它负责管理所有的转换器(Morpher),在执行转换...

    ezmorph-1.0.6

    3. JSON解析与生成:结合其他JSON库,如Gson或Jackson,可以利用ezmorph的强大转换能力处理JSON数据的解析和序列化过程。 在实际应用中,ezmorph-1.0.6通常与其他JSON库结合使用,以实现更全面的JSON操作。例如,...

Global site tag (gtag.js) - Google Analytics