Dozer + Spring:MappingException:Dozer Bean Mapper已经初始化

时间:2015-02-28 23:49:47

标签: java spring dozer

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

Spring config:

@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()出现异常。有人可以指出我做错了吗?

1 个答案:

答案 0 :(得分:3)

每次调用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(...)。在第一次推土机使用后,推土机将其内部属性设置为不允许添加映射或其他重新配置。