深层复制:Orika 与 SerializationUtils

Deep copy: 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;
}

DefaultMapper 是 orika-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 是替代品吗?

Orika 的速度要快得多。在 10000 次映射迭代中,orika 需要 3 毫秒来映射我的对象。 SerializationUtils 需要超过 3 才能完成相同的操作。此外,orika 对已经映射的对象有一个缓存。当然这会使用更多的元空间。这取决于具体情况,但总的来说,orika 对我来说是一个更好的解决方案。