Учебник Spring Boot для начинающих
Полный курс по Spring Boot 3 — фактическому стандарту бэкенда на Java. Вы пройдёте путь от первого эндпоинта до production-приложения: освоите слоистую архитектуру, REST-контроллеры, инверсию управления и конструкторное внедрение зависимостей, работу с базой через Spring Data JPA, сервисный слой с транзакциями, DTO и валидацию, безопасность на Spring Security 6 с BCrypt и JWT, тестирование и деплой в Docker.
Курс построен на актуальном стеке 2024–2025 годов: Spring Boot 3.x, Java 21, namespace jakarta, современные best practices. Каждый урок содержит разбор «под капотом», частые ошибки, рекомендации и запускаемые интерактивные врезки, объясняющие логику фреймворка на простых примерах.
Курс «Spring Boot: бэкенд на Java» состоит из 6 разделов и 23 уроков: Введение в Spring Boot, REST-контроллеры, Внедрение зависимостей (DI), Spring Data JPA, Сервисы, DTO и валидация и Безопасность и production-практика. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Введение в Spring Boot
- Что такое Spring Boot и зачем он нужен
Spring Boot — фреймворк для быстрой разработки бэкенда на Java: автоконфигурация, встроенный сервер, стартеры. Разбираем, какую боль он решает.
- Архитектура приложения: слои и поток запроса
Слоистая архитектура Spring Boot: Controller → Service → Repository → БД. Разбираем путь HTTP-запроса от клиента до базы и обратно с ASCII-диаграммой.
- Первое приложение: структура проекта и Spring Initializr
Создаём проект на start.spring.io, разбираем структуру Maven/Gradle, application.yml, первый запуск и эндпоинт. Практический старт.
- Maven, зависимости и стартеры
Как Maven управляет зависимостями, что такое spring-boot-starter, parent POM и BOM. Разбираем, откуда берутся согласованные версии библиотек.
- Что такое Spring Boot и зачем он нужен
2 REST-контроллеры
- REST-контроллеры: @RestController и маршрутизация
@RestController, @RequestMapping, @GetMapping и друзья. Как Spring сопоставляет URL с методами и сериализует ответ в JSON.
- Параметры запроса: @PathVariable, @RequestParam, @RequestBody
Три способа принять данные от клиента: переменные пути, query-параметры и тело запроса. Когда какой использовать и как Spring их связывает.
- HTTP-методы и статусы: ResponseEntity и @ResponseStatus
Управление кодами ответа: 200, 201, 204, 404. ResponseEntity для полного контроля над статусом и заголовками, @ResponseStatus для простоты.
- Глобальная обработка ошибок: @RestControllerAdvice и ProblemDetail
Централизованная обработка исключений через @RestControllerAdvice. Стандарт ProblemDetail (RFC 7807) для единообразных ошибок API.
- REST-контроллеры: @RestController и маршрутизация
3 Внедрение зависимостей (DI)
- IoC-контейнер и бины: сердце Spring
Инверсия управления и контейнер бинов. Как Spring создаёт объекты, хранит их и отдаёт по запросу. Основа всего фреймворка.
- Внедрение зависимостей: конструкторное против полевого
Конструкторное внедрение — современный стандарт. Почему оно лучше полевого (@Autowired на поле): immutability, тестируемость, явные зависимости.
- Стерео-аннотации и @Bean: способы объявить бин
@Component, @Service, @Repository, @Controller и метод @Bean в @Configuration. Когда что использовать и чем они отличаются.
- Профили, @Value и внешняя конфигурация
@Value для чтения настроек, @ConfigurationProperties для типобезопасной конфигурации, профили (@Profile) для разных окружений: dev, prod, test.
- IoC-контейнер и бины: сердце Spring
4 Spring Data JPA
- Сущности и ORM: @Entity, @Id и маппинг таблиц
Объектно-реляционное отображение: класс ↔ таблица, поле ↔ колонка. Аннотации @Entity, @Table, @Id, @GeneratedValue, @Column в namespace jakarta.
- Репозитории Spring Data: JpaRepository и магия методов
JpaRepository даёт CRUD из коробки. Производные запросы по имени метода (findByEmail) — Spring сам генерирует SQL. Никакого ручного кода доступа.
- @Query, JPQL и нативные запросы
Когда имени метода мало: @Query с JPQL для сложных запросов, нативный SQL, именованные параметры. Контроль над тем, что уходит в базу.
- Связи между сущностями и пагинация
Отношения @OneToMany, @ManyToOne, ленивая загрузка и проблема N+1. Пагинация через Pageable и Page для больших наборов данных.
- Сущности и ORM: @Entity, @Id и маппинг таблиц
5 Сервисы, DTO и валидация
- Сервисный слой и транзакции (@Transactional)
Сервис — место бизнес-логики. @Transactional обеспечивает атомарность: всё или ничего. Разбираем границы транзакций и откат при ошибке.
- DTO и маппинг: почему нельзя отдавать сущности наружу
DTO отделяет API от модели БД. Почему опасно возвращать @Entity в JSON: утечка данных, LazyInitializationException, жёсткая связь. Маппинг entity ↔ DTO.
- Валидация входных данных: Bean Validation и @Valid
Декларативная валидация: @NotNull, @Email, @Size на полях DTO + @Valid в контроллере. Как ошибки превращаются в понятный ответ 400.
- Сервисный слой и транзакции (@Transactional)
6 Безопасность и production-практика
- Spring Security 6: SecurityFilterChain и цепочка фильтров
Основы Spring Security 6: цепочка фильтров, бин SecurityFilterChain с лямбда-DSL, requestMatchers вместо antMatchers. Современная конфигурация без WebSecurityConfigurerAdapter.
- Аутентификация: BCrypt, UserDetails и JWT
Хранение паролей через BCryptPasswordEncoder, модель UserDetails, основы stateless-аутентификации через JWT-токены. Почему пароли никогда не хранят в открытом виде.
- Тестирование и Spring Boot Actuator
Юнит-тесты с JUnit 5 и Mockito, срезы @WebMvcTest/@DataJpaTest, интеграционные @SpringBootTest. Actuator для health-чеков и метрик в проде.
- Деплой, профили и production-практики
Сборка исполняемого JAR, профили окружений, конфиги через переменные окружения, упаковка в Docker, чек-лист готовности к продакшену.
- Spring Security 6: SecurityFilterChain и цепочка фильтров