深拷贝:Orika vs SerializationUtils

3
在实体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是否也是一种选择?


在这种情况下,您不能使用工厂将DefaultMapper作为单例提供服务吗? - James S
我之前说 new DefaultMapper() 是问题是错误的。实际上,每次使用 new 实例化它并不是问题。问题出在映射上,这就是反射发生的地方。我会更新我的帖子。 - Chris311
1个回答

2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接