Ответ
При первом запросе к Spring Boot приложению происходит ленивая инициализация контекста, если он не был создан ранее. Этот процесс включает:
- Создание ApplicationContext: Загружается и инициализируется корневой контекст приложения.
- Сканирование и создание бинов: Сканируются классы на наличие стереотипных аннотаций (
@Component,@Service,@Controller,@Repository), создаются соответствующие бины и разрешаются зависимости (DI). - Вызов методов жизненного цикла: Выполняются методы, помеченные
@PostConstruct. - Обработка запроса: Запускается цепочка фильтров (если есть), определяется контроллер и метод-обработчик, выполняются интерсепторы и аспекты, формируется ответ.
Почему первые запросы медленнее? Из-за накладных расходов на однократную инициализацию контекста. Для продакшена используют прогрев (warm-up) приложения.
Пример настройки ленивой инициализации:
# application.properties
spring.main.lazy-initialization=true
Или для отдельного бина:
@Bean
@Lazy
public ExpensiveService expensiveService() {
return new ExpensiveService(); // Создастся только при первом внедрении или вызове
}