Ответ
DispatcherServlet находит контроллеры через механизм сканирования компонентов Spring и последующего сопоставления запросов.
Процесс состоит из двух ключевых шагов:
-
Обнаружение бинов-контроллеров: Spring сканирует classpath в поиске классов, помеченных аннотациями
@Controllerили@RestController. Область сканирования задается:- В конфигурации Java:
@ComponentScan("com.example.controllers") - В XML:
<context:component-scan base-package="com.example.controllers"/>
- В конфигурации Java:
-
Сопоставление запросов с методами: После создания бинов,
DispatcherServletиспользуетHandlerMapping(по умолчаниюRequestMappingHandlerMapping). Этот компонент анализирует аннотации@RequestMappingи ее производные (@GetMapping,@PostMappingи т.д.) на методах контроллеров, строя карту соответствия URL → метод обработчика.
Пример контроллера:
@RestController
@RequestMapping("/api") // Базовый путь
public class UserController {
@GetMapping("/users/{id}") // Сопоставление с GET /api/users/123
public User getUser(@PathVariable Long id) {
// ... логика
}
}