Как Spring 2.5 сопоставляет данные входящего запроса с командой ModelAttribute?
-
03-07-2019 - |
Вопрос
Я использовал Spring 2.0, а теперь использую Spring 2.5. Естественно, Spring 2.5 очень облегчил жизнь веб-контроллерам.Мне все время приходит в голову вопрос, что в версии 2.0 нам нужно было установить класс команды и, соответственно, AbstractFormController, используемый для заполнения этого командного объекта для нас.В Spring 2.5 мы этого не делаем, так как же узнать, какой класс использовать?Зависит ли это от типа параметра, к которому мы добавили аннотацию @ModelAttribute("command")?
Если да, то сообщите мне любой класс «Utils», который обеспечивает точный механизм, с помощью которого я могу передать HttpRequest и имя класса (или объект класса), и который вернет мне заполненный объект!
Надеюсь, вы поняли мой вопрос.
Заранее спасибо.
Решение
Привязка аннотаций Web MVC в конечном итоге зависит от
org.springframework.beans.AbstractPropertyAccessor
который имеет две конкретные реализации:
org.springframework.beans.beanwrapperimpl org.springframework.beans.directfieldaccorsor
Оба принимают объект Java, который будет целью установки свойств.
Первый, BeanWrapperImpl, использует методы установки/получения объекта Java, а другой устанавливает поля напрямую.Оба проверяют, что методы/поля являются общедоступными/доступными, и в противном случае используют setAccessible(true) отражения, чтобы гарантировать, что его можно установить.
Из Web MVC создается экземпляр AbstractPropertyAccessor, а карта параметров HttpRequest передается в AbstractPropertyAccessor#setPropertyValues.
После вызова объект Java заполняется всем, что есть на карте.