首页 > 解决方案 > 深拷贝:Orika vs SerializationUtils

问题描述

在一个实体MyEntity中,我发现了这样的东西

@Override
public MyEntity clone(){
    // TODO: do not use Orika here
    MyEntity clone = new DefaultMapper().map(this, MyEntity.class);
    clone.setFieldA(null);
    clone.setFieldB(null);
    return clone;
}

作为一个orika DefaultMapper-mapper:

import javax.enterprise.context.ApplicationScoped;

import ma.glasnost.orika.impl.ConfigurableMapper;

@ApplicationScoped
public class DefaultMapper extends ConfigurableMapper {

}

使用 orika 进行深层复制是否合法?还是应该使用 SerializationUtils 来实现这一点?

原因TODO是:每次我们调用clone()orika 时都会使用反射来计算实际映射。遗憾的是我们不能使用注入,因为我们在一个实体内部。

我们也可以创建一个构造函数,在其中手动映射每个字段。这不是解决方案,因为有很多字段嵌套很深。此外,如果添加新列,则忘记调整映射的风险很高。

您有比使用 orika 更好的解决方案吗?SerializationUtils 是替代品吗?

标签: javaclonedeep-copyorika

解决方案


Orika 的速度更快。在 10000 次映射迭代中,orika 需要 3 毫秒来映射我的对象。SerializationUtils 需要超过 3的时间来做同样的事情。此外,orika 有一个用于已映射对象的缓存。当然,这使用了更多的元空间。这取决于情况,但在我的情况下,总体而言,orika 是一个更好的解决方案。


推荐阅读