Вот один из моих 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). Строка targetBeanId - это идентификатор целевого компонента (тоже игнорируется).
Спасибо за ответ. Я думаю, что я не очень понял свой вопрос. Я действительно искал фактическую реализацию. Трудная часть - сложная логика. – chris 2010-12-10 01:05:01
Рассмотрим пример реального мира: Spring Framework. Когда ваше приложение нуждается в определенном компоненте, оно вызывает (косвенно) BeanFactory.getBean (имя строки). BeanFactory обладает знаниями обо всех определениях бобов (обычно загружается из файла XML) и выполняет все необходимые настройки проводки/свойств. Когда BeanFactory.getBean() вернется, вы получите компонент со свойствами, совместимыми с определением bean из файла XML. – 2010-12-10 10:20:17