Orika clean MapperFactory

Posted

技术标签:

【中文标题】Orika clean MapperFactory【英文标题】: 【发布时间】:2015-05-15 12:04:46 【问题描述】:

我正在使用 Spring MVC 和 Orika 将一些实体映射到 XML,但我面临的问题是,当我尝试在同一个实例中重用带有一些新映射器的 MapperFactory 时,不仅不删除以前的我注册的映射器,但据说添加了新的映射器后,只在 map 方法调用中调用,这是我注册的第一个映射器。

这里有一些代码:

@Override
public void configureMapper() 
    ConverterFactory converterFactory = factory.getConverterFactory();
    ClassMapBuilder builder = factory.classMap(PublicProcurement.class, RequestForQuotationBody.class)
            .mapNulls(false);
    for (DocumentBodyMapper<RequestForQuotationBody, PublicProcurement> mapper : mappers) 
        mapper.register(builder, converterFactory);
    
    builder.register();


@Override
public void setMappers(List<DocumentBodyMapper<RequestForQuotationBody, PublicProcurement>> documentBodyMappers) 
    this.mappers = documentBodyMappers;

所以我第一次使用 AMapper.class 配置 MapperFactor 一个映射器列表,然后在完成创建该 xml 后,我再次调用这一次传递一个映射器列表 BMapper.class, CMapper.class。但是这次当我调用地图时。只有 AMapper.class 出现,所以只有关于 AMapper 的 xml 出现。

知道如何重置 MapperFactory 吗?

【问题讨论】:

【参考方案1】:

最后,由于使用 Spring,我将映射器定义为原型,并在每个事务中创建一个新实例以清理映射器工厂

【讨论】:

注意每次重新创建MapperFactory带来​​的开销,绝对不是正确的使用方式。 是我发现清理 mapperFactory 并可以将其作为动态多映射器重用的唯一方法。我认为 Orika 的构想不符合我的功能需求。 也许吧,但我不明白你为什么需要清理它。您要映射到的类是有限的,也许某些字段应该/或不应该为每个请求映射,那么您要使用的是动态过滤器。我使用 Orika 映射任意 JsonNode 我没有遇到这种特殊需要来清理映射器工厂。我想我错过了你的意思 因为我有一个映射器可以注册一个映射器列表,所以这些映射器可以更改。所以想象一下我的multiMapperClass有时可以注册AMapperClass和BMapperClass,有时可以注册CMapperClass和BMapperClass。这就是为什么我需要清理 multiMapperClass 的 MapperFactory 考虑使用多个 MapperFactory(针对每种情况)而不是动态注册/清理映射器,如果 MapperFactory 的数量...

以上是关于Orika clean MapperFactory的主要内容,如果未能解决你的问题,请参考以下文章

Orika 嵌套属性扁平化

orika core工具对实体(Bean)进行深度拷贝

Orika —— 工具类

text bug da aprire ad orika

常见Bean映射工具分析评测及Orika介绍

MapperFacade使用