Что происходит в Spring Boot при первом HTTP-запросе?

«Что происходит в Spring Boot при первом HTTP-запросе?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При первом запросе к Spring Boot приложению происходит ленивая инициализация контекста, если он не был создан ранее. Этот процесс включает:

  1. Создание ApplicationContext: Загружается и инициализируется корневой контекст приложения.
  2. Сканирование и создание бинов: Сканируются классы на наличие стереотипных аннотаций (@Component, @Service, @Controller, @Repository), создаются соответствующие бины и разрешаются зависимости (DI).
  3. Вызов методов жизненного цикла: Выполняются методы, помеченные @PostConstruct.
  4. Обработка запроса: Запускается цепочка фильтров (если есть), определяется контроллер и метод-обработчик, выполняются интерсепторы и аспекты, формируется ответ.

Почему первые запросы медленнее? Из-за накладных расходов на однократную инициализацию контекста. Для продакшена используют прогрев (warm-up) приложения.

Пример настройки ленивой инициализации:

# application.properties
spring.main.lazy-initialization=true

Или для отдельного бина:

@Bean
@Lazy
public ExpensiveService expensiveService() {
    return new ExpensiveService(); // Создастся только при первом внедрении или вызове
}