Как DispatcherServlet
(или любой другой компонент, поддерживающий инфраструктуру Spring MVC) динамически разрешает сигнатуру метода обработчика экземпляра @Component
и как он узнает, какие параметры/типы ожидаются, в каком порядке, в этом методе ?
Если у меня есть метод обработчика @RequestMapping
ed, в моем экземпляре @Controller
определяется любая версия его подписи:
public String f() {...}
public String f(Model model) {...}
public String f(HttpServletRequest, Model model) {...}
public String f(Model model, HttpServletRequest) {...}
public String f(SomeEntity se, Model model, HttpServletRequest, AnotherModel am) {...}
//so on..
будет работать нормально, независимо от количества, типов и порядка параметров, которые, в конце концов, снабжены соответствующими аргументами, опять же не учитывая их количества, порядка и типов.
Должна быть проделана большая работа, чтобы правильно создать экземпляр ожидаемых аргументов, передать их в правильном порядке, возможно, даже выполнить некоторое приведение типов, если это необходимо... и так далее, но я не понять основы этого.
Я просмотрел соответствующие источники из модуля spring-webmvc
и источники модуля DispatcherServlet
; однако, не получил твердого понимания основного механизма.
Я могу предположить, что могут быть задействованы какие-то BeanPostProcessor
.. выполнение рефлексивного доступа и т. д.. но даже в этом случае, поскольку я не уверен в том, что происходит, я был бы очень признателен за любой ценный вклад.