Вот одна из моих BeanFactories, надеюсь, она поможет объяснить общий шаблон:
public class LineBeanFactory implements BeanFactory {
@Override
public Object createBean(final Object source, final Class<?> sourceClass, final String targetBeanId) {
final LineDto dto = (LineDto) source;
return new Line(dto.getCode(), dto.getElectrified(), dto.getName());
}
}
И соответствующее сопоставление XML:
<mapping>
<class-a bean-factory="com.floyd.nav.web.ws.mapping.dozer.LineBeanFactory">com.floyd.nav.core.model.Line</class-a>
<class-b>com.floyd.nav.web.contract.dto.LineDto</class-b>
</mapping>
Таким образом, я заявляю, что когда требуется новый экземпляр Line, он должен создать его с моим BeanFactory. Вот модульный тест, который может это объяснить:
@Test
public void Line_is_created_with_three_arg_constructor_from_LineDto() {
final LineDto dto = createTransientLineDto();
final Line line = (Line) this.lineBeanFactory.createBean(dto, LineDto.class, null);
assertEquals(dto.getCode(), line.getCode());
assertEquals(dto.getElectrified(), line.isElectrified());
assertEquals(dto.getName(), line.getName());
}
Итак, Источник объекта - это сопоставляемый исходный компонент, Класс sourceClass - это класс исходного компонента (я его игнорирую, потому что он всегда будет LineDto. пример). String targetBeanId - идентификатор целевого компонента (слишком игнорируется).