2015-02-28 3 views
2

Я пытаюсь реализовать Dozer как справку для шаблона моста на моем текущем webapp, работающем под Spring и Hibernate, но я думаю, что я делаю что-то неправильно, так как пытаюсь использовать экземпляр DozerBeanMapper более одного раза, даст мне исключение MappingException.Dozer + Spring: MappingException: Dozer Bean Mapper уже инициализирован

Spring конфигурации:

@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(). Может ли кто-нибудь указать, что я делаю неправильно?

ответ

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; 
    } 
} 

Вы должны сделать все ваши настройки для Dozer перед использованием - mapper.map(...). После первого использования бульдозера бульдозер устанавливает свое внутреннее свойство, чтобы не допустить добавления карт или другой реконфигурации.