【问题标题】:Dozer + Spring: MappingException: Dozer Bean Mapper is already initializedDozer + Spring:MappingException:Dozer Bean Mapper 已经初始化
【发布时间】:2015-02-28 23:49:47
【问题描述】:

我正在尝试在当前运行 Spring 和 Hibernate 的 web 应用上实现 Dozer 作为桥接模式的帮助,但我认为我做错了,因为尝试多次使用 DozerBeanMapper 实例会给我一个 MappingException。

弹簧配置:

@Configuration
public class AppConfig {
    ...
    @Bean
    public DozerBeanMapper dozerBeanMapper() {
        return new DozerBeanMapper();
    }
}

用法:

@Service
public class FooService {
    @Autowired
    private DozerBeanMapper mapper;

    public void doSomething() {
        mapper.addMapping(new CustomRules());
        mapper.map(foo, ImmutableFoo.class);
        ...
    }
    ...
}

我第一次调用此服务时可以正常工作,但任何进一步尝试使用它都会导致mapper.addMapping() 出现异常。有人可以指出我做错了什么吗?

【问题讨论】:

    标签: java spring dozer


    【解决方案1】:

    您不应该在每次调用doSomething 时都添加映射器,即使它可以工作,它的可扩展性也会降低。在这种情况下,您应该将 mapper.addMapping(new Custom Rules()); 移至 bean 实例化。

    @Configuration
    public class AppConfig {
      ...
        @Bean
        public DozerBeanMapper dozerBeanMapper() {
            DozerBeanMapper mapper = new DozerBeanMapper();
            mapper.addMapping(new CustomRules());
            return mapper;
        }
    }
    

    您必须在使用推土机之前对其进行所有配置 - mapper.map(...)。在第一次使用推土机后,推土机将其内部属性设置为不允许添加映射或其他重新配置。

    【讨论】:

      猜你喜欢
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多