我正在尝试在运行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()
出现异常。有人可以指出我做错了吗?
答案 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(...)
。在第一次推土机使用后,推土机将其内部属性设置为不允许添加映射或其他重新配置。