УРОК 1 / 30 0%

🌱 Что мы строим и как устроен Spring Boot

🎯

Цель урока

Понять, зачем нужен Spring Boot, как он устроен изнутри, и поднять минимальное приложение, которое что-то отвечает по HTTP.

🧠

Теория · для собеса

1 Что такое Spring Boot

Spring Boot — «обёртка» над Spring Framework, которая убирает рутину:

  • не надо писать XML/конфиги руками
  • стартеры — набор совместимых зависимостей «в одну строку»
  • встроенный сервер (Tomcat/Jetty) — приложение запускается как обычный java -jar app.jar
  • автоконфигурация — Spring сам подбирает настройки по тому, что нашёл в classpath
🧱 Аналогия: Spring Framework — это набор деталей Lego. Spring Boot — готовая коробка «собери машинку по инструкции за 5 минут». Детали те же, но инструкция и подбор уже сделаны за тебя.
💡
На собесе: «объясните разницу между Spring и Spring Boot» — классика.
2 @SpringBootApplication · три в одном

Ставится на класс с main. Это три аннотации в одной:

@Configuration

класс может объявлять бины

@EnableAutoConfiguration

Spring смотрит в classpath и подключает то, что нужно

@ComponentScan

сканирует текущий пакет и ниже, находит @Component, @Service, @Repository, @RestController

💡
На собесе: «что делает @SpringBootApplication?» — «это три аннотации в одной».
3 Стартеры · spring-boot-starter-*

Стартер — это пустой пакет с POM, который тянет связку совместимых библиотек.

spring-boot-starter-web
Spring MVC + встроенный Tomcat + Jackson
spring-boot-starter-data-jpa
Hibernate + JPA API + HikariCP
spring-boot-starter-security
Spring Security
spring-boot-starter-validation
Hibernate Validator (Bean Validation)
spring-boot-starter-actuator
/actuator/health, метрики

Версии стартерам не указываешь — Spring Boot BOM (spring-boot-dependencies) сам подбирает совместимые.

4 REST и HTTP-методы

REST — стиль API, где URL = ресурс, а HTTP-метод = действие над ним.

Метод
Действие
Идемп.
Безоп.
GET
Получить
POST
Создать
PUT
Заменить целиком
PATCH
Изменить частично
DELETE
Удалить

Идемпотентность: повторный вызов даёт тот же результат. DELETE /users/1 10 раз = пользователь удалён 1 раз. POST /users 10 раз = 10 разных пользователей.

Безопасность: метод не меняет состояние сервера. Только GET.

💡
На собесе: «PUT vs PATCH», «что такое идемпотентность», «какие методы безопасные».
💻

Практика: поднимаем TaskFlow

  1. 1
    Создай проект

    Через start.spring.io или в IDEA (New → Project → Spring Initializr):

    • BuildGradle · Kotlin DSL
    • LanguageJava 21
    • Spring Boot3.4.x
    • DependenciesSpring Web
  2. 2
    Главный класс

    Точка входа:

    package com.taskflow;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class TaskFlowApplication {
        public static void main(String[] args) {
            SpringApplication.run(TaskFlowApplication.class, args);
        }
    }
  3. 3
    REST-контроллер
    package com.taskflow.controller;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    import java.time.Instant;
    import java.util.Map;
    
    @RestController
    public class HealthController {
    
        @GetMapping("/api/health")
        public Map<String, Object> health() {
            return Map.of(
                "status", "UP",
                "time", Instant.now().toString()
            );
        }
    }
  4. 4
    Запуск

    В IDE — зелёная стрелка на TaskFlowApplication.
    Или в терминале:

    ./gradlew bootRun
  5. 5
    Проверка
    curl http://localhost:8080/api/health
    # {"status":"UP","time":"2026-06-29T..."}

    Если видишь JSON — всё работает. 🎉

🎯

Зачем это на собесе

После урока ты должен уметь ответить на:

«Что такое Spring Boot?» — обёртка над Spring: стартеры, автоконфиг, встроенный сервер.
«Что делает @SpringBootApplication — 3 в 1: @Configuration + @EnableAutoConfiguration + @ComponentScan.
«Что такое стартер?» — POM с набором совместимых зависимостей; версии подбирает BOM.
«Чем GET отличается от POST?» — GET безопасный и идемпотентный, POST создаёт новый ресурс.
«Идемпотентность — это что?» — повторный вызов даёт тот же результат.

5 вопросов на углубление

0 / 5

Выбери вопросы, которые тебе реально интересны. По выбранным — объясню подробно.

1
Как автоконфигурация работает под капотом?

Что такое META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports и как @ConditionalOnClass решает, подключать конфиг или нет.

2
Spring vs Spring Boot — в чём разница на уровне «что под капотом»?

Что именно Boot делает за тебя, без чего ты бы писал руками.

3
Идемпотентность и безопасность HTTP-методов — почему POST не идемпотентный?

Что будет, если клиент отправит запрос повторно.

4
Зачем нужен встроенный Tomcat, если раньше деплоили WAR?

Как это изменило деплой и контейнеризацию.

5
Gradle vs Maven — что выбрать в 2026-м?

Почему build.gradle.kts (Kotlin DSL), а не build.gradle (Groovy).

Готов идти дальше?

Если что-то в теории непонятно — спрашивай, разберём подробнее.

Сначала пройди все секции и выбери хотя бы 1 вопрос.