2014-11-07 1 views
0
public ModelAndView loginPage(HttpServletRequest request, Locale locale) {} 

Как вы знаете, весна впрыскивает HttpServletRequest и Locale в метод. Я хочу знать , как это делается за шторами? Я предполагаю, что существует система конвертирования данных, работающая за , которая обрабатывает заголовки и данные запроса HTTP и заполняет их подходящими классами, которые даются в аргументах кодера. Я прав ?Как весна вводят аргументы в метод контроллера

ответ

0

Да, вы правы. Короче говоря, в приложение есть одна точка входа (может быть более одной точки входа), которая маршрутизирует входящий трафик, передавая входящие данные методам в качестве параметров. Это называется шаблоном переднего контроллера.

Spring's DispatcherServlet - это реализация шаблона переднего контроллера. Значение пружины details the pattern, как показано на рисунке весной, и шаблон указан среди core Java EE patterns.

2

При работе с Spring MVC есть несколько частей, перемещающихся для решения проблемы отображения HandlerMapping и исполнения HandlerAdapter.

@Controller Каждого сканируются на @RequestMapping аннотированных методы, методы преобразуются в URL-адрес на основе метаданных, доступных в @RequestMapping аннотации, это делается с помощью RequestMappingHandlerMapping класса.

Когда запрос, входящий в конкретный метод, сопоставляется с входящим запросом. Этот выбранный метод передается RequestMappingHandlerAdapter, который рассматривает все аргументы метода. Фактическая обработка аргумента метода оставлена ​​для разных реализаций HandlerMethodArgumentResolver (вы также можете реализовать свои собственные).

То же самое происходит с возвращаемым значением вашего метода, хотя это делегировано HandlerMethodReturnValueHandler.