Java 深度复制:Orika vs SerializationUtils

Java 深度复制:Orika vs SerializationUtils,java,clone,deep-copy,orika,Java,Clone,Deep Copy,Orika,在实体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; } 使用DefaultMappe

在实体
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映射器:

import javax.enterprise.context.ApplicationScoped;

import ma.glasnost.orika.impl.ConfigurableMapper;

@ApplicationScoped
public class DefaultMapper extends ConfigurableMapper {

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

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

我们也可以制作一个构造器,手工映射每个字段。这里没有解决方案,因为有许多字段具有深度嵌套。此外,如果添加了一个新列,则很有可能忘记调整映射

你有没有比使用orika更好的解决方案?
序列化UTILS是一种替代方案吗?

Orika的速度要快得多。在10000次贴图迭代中,orika需要3毫秒来映射我的对象。序列化UTIL需要3秒钟以上才能完成。此外,orika还为已映射的对象提供缓存。当然,这会使用更多的元空间。这取决于具体情况,但总体而言,orika是我的一个更好的解决方案。

在这种情况下,您不能将DefaultMapper作为工厂的一个单独组件提供吗?我错误地告诉您,
new DefaultMapper()
就是问题所在。实际上,总是用new实例化它并不是一个问题。问题在于映射。这就是反射发生的地方。我会更新我的帖子。