可以cglib(java)深度复制具有list属性的bean

时间:2016-06-01 10:34:20

标签: java deep-copy cglib

这是代码

public class Root {
 private Long id;
 private List<Child> list;
 //getter and setter
}
public class Child {
 private Long id;
 //getter and setter
}

public static void main(String args) {
    Child child = new Child();
    child.setId(1L);
    List<Child> list = new ArrayList<>();
    list.add(child);
    Root root = new Root();
    Root copyRoot = new Root();
    root.setId(2L);
    root.setList(list);

    BeanCopier copier1 = BeanCopier.create(Root.class, Root.class, false);
    copier1.copy(root, copyRoot, null);
    //can beancopier in cglib deep copy this root to copyRoot?
    //because i found when i used beancopier the two instances still point the same list instance
}

可以在cglib中beancopier深度复制这个root到copyRoot吗? 因为我发现当我使用beancopier时,两个实例仍指向相同的列表实例

1 个答案:

答案 0 :(得分:0)

cglib可以使用代码生成来改进复制的方式是创建一个子类,该类是提供的类的子类。 cglib需要为每个嵌套类型执行此操作,而无法知道为每个字段分配了哪个子类实例,因此,这不起作用。

一般来说,我建议您不要依赖代码生成来执行此任务;在JVM还很年轻的时候,这才真正提供了性能优势。现代虚拟机使用反射表现同样出色,例如Apache的bean。

首先创建自动深层副本可能不是一个好主意,但您可能会考虑appropriate utilities