У меня есть приложение Spring MVC, пытающееся использовать богатую модель предметной области со следующим сопоставлением в классе Controller:
@RequestMapping(value = "/entity", method = RequestMethod.POST)
public String create(@Valid Entity entity, BindingResult result, ModelMap modelMap) {
if (entity== null) throw new IllegalArgumentException("An entity is required");
if (result.hasErrors()) {
modelMap.addAttribute("entity", entity);
return "entity/create";
}
entity.persist();
return "redirect:/entity/" + entity.getId();
}
Прежде чем этот метод будет выполнен, Spring использует BeanUtils для создания нового экземпляра Entity и заполнения его полей. Он использует это:
...
ReflectionUtils.makeAccessible(ctor);
return ctor.newInstance(args);
Вот проблема:
Мои объекты - это управляемые компоненты Spring. Причина этого заключается в том, чтобы внедрить в них DAO. Вместо вызова new я использую EntityFactory.createEntity(). Когда они извлекаются из базы данных, у меня есть перехватчик, который переопределяет
public Object instantiate(String entityName, EntityMode entityMode, Serializable id)
метод и подключает к нему фабрики.
Таким образом, последняя часть головоломки, отсутствующая здесь, — это как заставить Spring использовать фабрику, а не собственный рефлексивный подход BeanUtils? Любые предложения для чистого решения?
Большое спасибо заранее.