Ответ
Spring использует механизм сканирования компонентов (Component Scanning), активируемый аннотацией @ComponentScan. При запуске приложения Spring сканирует указанные пакеты (по умолчанию — пакет, содержащий класс с @SpringBootApplication) в поиске классов, помеченных стереотипными аннотациями.
Ключевые аннотации для контроллеров:
@Controller— для MVC-контроллеров с поддержкой представлений.@RestController(комбинация@Controller+@ResponseBody) — для REST API.
Процесс обнаружения:
- Класс с
@SpringBootApplicationнеявно содержит@ComponentScan. - Spring сканирует класс-пути (classpath) в поиске классов с
@Controller,@RestControllerили@Component. - Найденные классы регистрируются как бины в
ApplicationContext. - Для этих бинов создаются прокси, и их методы, аннотированные
@RequestMapping,@GetMappingи т.д., маппятся на URL-путиDispatcherServlet.
Пример:
@SpringBootApplication // Включает @ComponentScan
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
@RestController // Будет обнаружен и зарегистрирован
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello World";
}
}
Почему это важно: Этот механизм избавляет от необходимости ручной регистрации каждого контроллера в XML или конфигурации, обеспечивая конвенцию над конфигурацией.