【问题标题】:can cglib(java) deep copy a bean that has a list propertycglib(java) 可以深度复制具有列表属性的 bean
【发布时间】:2016-06-01 10:34:20
【问题描述】:

这里是代码

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 可以深拷贝这个根到 copyRoot 吗? 因为我发现当我使用 beancopier 时,这两个实例仍然指向同一个列表实例

【问题讨论】:

    标签: java deep-copy cglib


    【解决方案1】:

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

    一般来说,我建议您也不要依赖代码生成来完成这项任务;这只是在 JVM 还很年轻的时候才真正提供了性能优势。使用反射的现代 VM 表现同样出色,例如 Apache 的 bean 实用程序。

    然而,首先创建自动深拷贝可能不是一个好主意,但您可以查看appropriate utilities

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 2020-05-05
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      相关资源
      最近更新 更多