Лауренциу Спилкэ 2023 ББК 32.988.02-018 УДК 004.738.2 С72 Спилкэ Лауренциу С72 Spring быстро. — СПб.: Питер, 2023. — 448 с.: ил. ISBN 978-5-4461-1969-1 Java-программистам необходим фреймворк Spring. Этот невероятный инструмент универсален: вы можете разрабатывать как приложения для малого бизнеса, так и микросервисервисные архи- тектуры промышленного масштаба. Освоить Spring не так-то просто, но первый шаг сделать легко! Книга предназначена для Java-разработчиков, желающих создавать приложения на основе Spring. Информативные иллюстрации, понятные примеры, а также ясное и живое изложение Лауренциу Спилкэ позволят быстро овладеть необходимыми навыками. Вы научитесь планировать, разраба- тывать и тестировать приложения. Благодаря акценту на наиболее важных функциях разберетесь в богатой экосистеме фреймворка Spring. 16+ (В соответствии с Федеральным законом от 29 декабря 2010 г. № 436-ФЗ.) ББК 32.988.02-018 УДК 004.738.2 Права на издание получены по соглашению с Manning Publications. Все права защищены. Никакая часть дан- ной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владель- цев авторских прав. Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как надежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не может гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за возможные ошибки, связанные с использованием книги. Издательство не несет ответственности за доступ- ность материалов, ссылки на которые вы можете найти в этой книге. На момент подготовки книги к изданию все ссылки на интернет-ресурсы были действующими. ISBN 978-1617298691 англ. © 2021 by Manning Publications Co. All rights reserved ISBN 978-5-4461-1969-1 © Перевод на русский язык ООО «Прогресс книга», 2022 © Издание на русском языке, оформление ООО «Прогресс книга», 2022 Краткое содержание Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 О .книге . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20 Об .авторе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Иллюстрация .на .обложке . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 От .издательства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Часть I Основные принципы Глава 1. Spring .в .реальном .мире . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Глава 2. Контекст .Spring: .что .такое .бины . . . . . . . . . . . . . . . . . . . . . . . 50 Глава 3. Контекст .Spring: .создаем .новые .бины . . . . . . . . . . . . . . . . . . .80 Глава 4. Контекст .Spring: .использование .абстракций . . . . . . . . . . . . . . 106 Глава 5. Контекст .Spring: .области .видимости .и .жизненный .цикл .бинов . . 132 Глава 6. Аспекты .и .АОП .в .Spring . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 6 Краткое содержание Часть II Реализация Глава 7. Введение .в .Spring .Boot .и .Spring .MVC . . . . . . . . . . . . . . . . . . 190 Глава 8. Р еализация .веб-приложений .с .использованием .Spring .Boot . . и .Spring .MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Глава 9. Области .веб-видимости .бинов .Spring . . . . . . . . . . . . . . . . . . . 241 Глава 10. Реализация .REST-сервисов . . . . . . . . . . . . . . . . . . . . . . . . 270 Глава 11. Использование .конечных .точек .REST . . . . . . . . . . . . . . . . . 293 Глава 12. Использование .источников .данных .в .Spring-приложениях . . . . 315 Глава 13. Транзакции .в .Spring-приложениях . . . . . . . . . . . . . . . . . . . 337 Глава 14. Сохранение .данных .с .помощью .Spring .Data . . . . . . . . . . . . . . 357 Глава 15. Тестирование .Spring-приложений . . . . . . . . . . . . . . . . . . . . 379 Приложение А. Архитектурные .концепции . . . . . . . . . . . . . . . . . . . . 404 Приложение Б. Использование .XML .в .конфигурации .контекста . . . . . . 418 Приложение В. Краткое .введение .в .HTTP . . . . . . . . . . . . . . . . . . . . . 420 Приложение Г. Представление .данных .в .формате .JSON . . . . . . . . . . . . 431 Приложение Д. Установка .MySQL .и .создание .базы .данных . . . . . . . . . 434 Приложение Е. Рекомендованные .инструменты . . . . . . . . . . . . . . . . . 442 Приложение Ж. М атериалы, .рекомендуемые .для .дальнейшего . . изучения .Spring . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 Оглавление Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 О .книге . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20 Кто .должен .прочитать .эту .книгу . . . . . . . . . . . . . . . . . . . . . . . . . .21 Структура .издания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 О .коде . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Об .авторе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Иллюстрация .на .обложке . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 От .издательства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Часть I Основные принципы Глава 1. Spring .в .реальном .мире . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 1 1 .Зачем .нужны .фреймворки . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 1 2 .Экосистема .Spring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 1 2 1 .Spring .Core .вблизи: .ядро .Spring . . . . . . . . . . . . . . . . . . . .34 1 2 2 .Сохранение .данных .приложения . . с .помощью .Spring .Data .Access . . . . . . . . . . . . . . . . . . . . . . . . . 36 8 Оглавление 1 2 3 .Возможности .Spring .MVC .для .разработки . . веб-приложений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 1 2 4 .Тестирование .в .Spring . . . . . . . . . . . . . . . . . . . . . . . . . .36 1 2 5 .Проекты .на .базе .экосистемы .Spring . . . . . . . . . . . . . . . . . . 37 1 3 .Spring .в .реальных .задачах . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 1 3 1 .Использование .Spring .для .разработки . . серверных .приложений . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39 1 3 2 .Использование .Spring .для .средств . . автоматизации .тестирования . . . . . . . . . . . . . . . . . . . . . . . . . . 41 1 3 3 .Использование .Spring .для .разработки . . десктопных .приложений . . . . . . . . . . . . . . . . . . . . . . . . . . . .43 1 3 4 .Использование .Spring .в .мобильных .приложениях . . . . . . . .44 1 4 .Когда .не .стоит .использовать .фреймворки . . . . . . . . . . . . . . . . . . 44 1 4 1 .Приложение .должно .занимать .как .можно .меньше .места . . . . . 45 1 4 2 .Безопасность .требует .написать .весь .код .самостоятельно . . . .45 1 4 3 .Использовать .фреймворк .нецелесообразно .из-за .слишком . большого .количества .настроек . . . . . . . . . . . . . . . . . . . . . . . . . 46 1 4 4 .Когда .переход .на .фреймворк .не .приносит .пользы . . . . . . . . . 46 1 5 .Чему .вы .научитесь, .прочитав .эту .книгу . . . . . . . . . . . . . . . . . . .48 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48 Глава 2. Контекст .Spring: .что .такое .бины . . . . . . . . . . . . . . . . . . . . . . . 50 2 1 .Создание .проекта .Maven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 2 2 .Добавление .бинов .в .контекст .Spring . . . . . . . . . . . . . . . . . . . . .57 2 2 1 .Добавление .бинов .в .контекст .Spring . . с .помощью .аннотации .@Bean . . . . . . . . . . . . . . . . . . . . . . . . .61 2 2 2 .Добавление .бинов .в .контекст .Spring . . с .помощью .стереотипных .аннотаций . . . . . . . . . . . . . . . . . . . . .70 2 2 3 .Программное .добавление .бинов .в .контекст .Spring . . . . . . . .75 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 Глава 3. Контекст .Spring: .создаем .новые .бины . . . . . . . . . . . . . . . . . . .80 3 1 .Установка .связей .между .бинами, .описанными . . в .файле .конфигурации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82 3 1 1 .Монтаж .бинов .путем .прямого .вызова .одного .метода . с .аннотацией .@Bean .из .другого .такого .же .метода . . . . . . . . . . . . . 85 Оглавление 9 3 1 2 .Монтаж .бинов .путем .передачи .параметра .в .метод . . с .аннотацией .@Bean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89 3 2 .Внедрение .бинов .с .помощью .аннотации .@Autowired . . . . . . . . . . . 91 3 2 1 .Внедрение .значений .через .поля .класса .с .использованием . аннотации .@Autowired . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92 3 2 2 .Использование .аннотации .@Autowired .для .внедрения . . значения .через .конструктор . . . . . . . . . . . . . . . . . . . . . . . . . .95 3 2 3 .Внедрение .зависимости .через .сеттер . . . . . . . . . . . . . . . . . 96 3 3 .Циклические .зависимости . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 3 4 .Выбор .из .нескольких .бинов .в .контексте .Spring . . . . . . . . . . . . . .99 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Глава 4. Контекст .Spring: .использование .абстракций . . . . . . . . . . . . . . 106 4 1 .Применение .интерфейсов .для .определения .контрактов . . . . . . . . 107 4 1 1 .Использование .интерфейсов .для .разделения .реализаций . . . 107 4 1 2 .Условия .задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 4 1 3 .Реализация .сценариев .использования .без .применения . фреймворка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 4 2 .Использование .внедрения .зависимостей .для .абстракций . . . . . . . 117 4 2 1 .Выбор .объектов .для .добавления . . в .контекст .Spring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 4 2 2 .Выбор .одной .из .реализаций .абстракции .для .автомонтажа . . 123 4 3 .Подробнее .об .обязанностях .объектов .со .стереотипными . . аннотациями . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Глава 5. Контекст .Spring: .области .видимости .и .жизненный .цикл .бинов . . 132 5 1 .Использование .одиночной .области .видимости . . . . . . . . . . . . . . 133 5 1 1 .Что .такое .одиночный .бин . . . . . . . . . . . . . . . . . . . . . . . 133 5 1 2 .Одиночные .бины .в .реальных .приложениях . . . . . . . . . . . . 141 5 1 3 .Немедленное .и .«ленивое» .создание .экземпляров . . . . . . . . 143 5 2 .Прототипная .область .видимости .бинов . . . . . . . . . . . . . . . . . . 145 5 2 1 .Как .работают .прототипные .бины . . . . . . . . . . . . . . . . . . 146 5 2 2 .Практическое .применение .прототипных .бинов . . . . . . . . . 150 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 10 Оглавление Глава 6. Аспекты .и .АОП .в .Spring . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 6 1 .Аспекты .в .Spring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 6 2 .Реализация .аспектов .в .Spring .с .помощью .АОП . . . . . . . . . . . . . 162 6 2 1 .Реализация .простого .аспекта . . . . . . . . . . . . . . . . . . . . . 162 6 2 2 .Изменение .параметров .и .возвращаемого .значения . перехваченного .метода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 6 2 3 .Перехват .методов .с .аннотациями . . . . . . . . . . . . . . . . . . 176 6 2 4 .Другие .полезные .аннотации .советов . . . . . . . . . . . . . . . . 180 6 3 .Цепочки .выполнения .аспектов . . . . . . . . . . . . . . . . . . . . . . . . 181 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Часть II Реализация Глава 7. Введение .в .Spring .Boot .и .Spring .MVC . . . . . . . . . . . . . . . . . . 190 7 1 .Что .такое .веб-приложение . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 7 1 1 .Основные .сведения .о .веб-приложениях . . . . . . . . . . . . . . 192 7 1 2 .Способы .реализации .веб-приложений .на .основе .Spring . . . . 193 7 1 3 .Использование .контейнера .сервлетов .в .веб-разработке . . . . 196 7 2 .Магия .Spring .Boot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 7 2 1 .Создание .проекта .Spring .Boot .с .помощью .сервиса . инициализации .проекта . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 7 2 2 .Упрощенное .управление .зависимостями . . с .помощью .диспетчеров .зависимостей . . . . . . . . . . . . . . . . . . . 206 7 2 3 .Автоматическая .конфигурация .по .соглашению . . на .основе .зависимостей . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 7 3 .Реализация .приложения .с .помощью .Spring .MVC . . . . . . . . . . . . 208 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Глава 8. Реализация .веб-приложений .с .использованием .Spring .Boot . . и .Spring .MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 8 1 .Создание .веб-приложений .с .динамическими . . представлениями . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 8 1 1 .Получение .данных .из .HTTP-запроса . . . . . . . . . . . . . . . . 222 8 1 2 .Передача .данных .от .клиента .серверу .посредством . . параметров .запроса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223