Загрузка конфигурации: JVM запускает метод main. Spring Boot автоматически определяет класс с методом main и запускает процесс автоконфигурации. Ищет аннотации @SpringBootApplication (или ее композицию).
Создание контекста приложения: Spring создает ApplicationContext. Это центральный интерфейс, который предоставляет конфигурацию для приложения. Контекст управляет жизненным циклом бинов.
Сканирование компонентов: Spring сканирует указанные пакеты (по умолчанию — пакет, содержащий основной класс приложения) на наличие аннотаций, указывающих на Spring-компоненты (@Component, @Service, @Repository, @Controller и их специализации).
Создание и внедрение бинов: Для найденных компонентов Spring создает экземпляры (бины) и управляет их зависимостями, используя механизм внедрения зависимостей (Dependency Injection) через аннотации @Autowired, @Resource, конструкторы или сеттеры.
Автоконфигурация: Spring Boot на основе classpath, свойств приложения и других факторов автоматически настраивает различные компоненты, такие как источник данных, Web-сервер (например, Tomcat по умолчанию), Spring MVC, JPA и т.д. Например, если есть зависимость spring-boot-starter-web, Spring Boot автоматически настраивает встроенный веб-сервер и Spring MVC.
Запуск встроенного веб-сервера: Если приложение веб-типа, Spring Boot запускает интегрированный веб-сервер (Tomcat, Undertow или Jetty), который слушает входящие HTTP-запросы на определенном порту (по умолчанию 8080).
Инициализация Spring MVC (для веб-приложений):
DispatcherServlet — центральный сервлет Spring MVC, который обрабатывает все входящие веб-запросы.DispatcherServlet инициализирует инфраструктуру Spring MVC: HandlerMapping (сопоставление URL с обработчиками), HandlerAdapter (вызов обработчиков), ViewResolver (разрешение имен представлений) и т.д.@Controller или @RestController, и регистрируются методы, помеченные аннотациями запросов (@GetMapping, @PostMapping и т.д.) в HandlerMapping.Приложение готово к работе: После завершения всех этих шагов приложение полностью инициализировано и веб-сервер готов принимать входящие HTTP-запросы.
Когда приходит первый запрос из Postman:
DispatcherServlet: Запрос передается DispatcherServlet.DispatcherServlet использует HandlerMapping для определения контроллера и метода, соответствующего URL и HTTP-методу входящего запроса.HandlerAdapter вызывает найденный метод контроллера, передавая ему параметры запроса (например, параметры пути, параметры запроса, тело запроса).@RestController результат автоматически сериализуется (например, в JSON).DispatcherServlet или соответствующий обработчик результата отправляет HTTP-ответ обратно клиенту (Postman).