У меня есть приложение 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? Любые предложения для чистого решения?
Заранее большое спасибо.