Учился я как-то давным-давно в университете на программиста. Лабораторные работы делал, курсовые писал. Про пет-проекты тоже не забывал, разумеется. Обычно пет-проекты представляли из себя игры на каком-нибудь языке: на Microsoft Visual Basic, на Microsoft Visual C++, на Pascal и т. д. Только ближе к концу университета и к своей первой официальной работе я перешёл на другие языки.
Я не помню, как я создал первую версию игры виртуальных питомцев, так как это было очень давно. Однако я точно помню, что в этой самой первой версии никакого сетевого режима, разумеется, не было. Была одна форма, созданная в визуальном конструкторе форм Delphi. И была обработка нажатия кнопок. При этом при закрытии игры и последующем открытии на следующий день состояние питомца менялось: появлялся голод, желание поиграть, поучиться и т. д.
В самой первой версии питомец был кроликом, а не кошкой. Причём весьма похожим на одного знаменитого кролика. Придумывать что-то своё я ведь не умел в то время.
Странно, на самом деле, что я тогда эту первую версию на Delphi написал. Ведь обычно я всё писал на Visual Basic.
Затем в процессе дальнейшего развития навыков программирования был написан сервер на PHP, который обрабатывал запросы от клиентской части. Почему PHP? Да очень просто: на нём проще всего было начать писать что-то осмысленное. А я был практически в самом начале кривой изучения. Да и бесплатных хостингов с поддержкой PHP было много.
Клиентская часть была переписана на Java с использованием Swing, так как в то время я активно изучал Java. Фактически на тот момент игра стала представлять из себя некое подобие ММО.
В проекте были следующие возможности:
Регистрация новых пользователей.
Аутентификация пользователей.
Создание новых питомцев.
Три типа разных питомцев.
Можно было кормить питомца.
Можно было поить питомца водой.
Можно было учить питомца. При этом отображалось, будто он читает книгу.
Онлайн игра в карты с питомцами других игроков. При победе повышала настроение питомца.
Некое подобие общего онлайн мира, в котором питомцы перемещались и собирали монетки.
Возможность игры в браузере с помощью JApplet.
Возможность игры с самостоятельным клиентом на Swing.
Был простенький клиент для мобильников на J2ME, который, правда, позволял выполнять только самые базовые возможности без онлайн карт и общего мира.
Проект даже какое-то время размещался на бесплатных серверах. Были в то время хостинги, позволявшие хоститься небольшим проектам бесплатно.
Где-то в 2016-ом году я активно начал учить Spring Framework в надежде сделать его своим основным рабочим навыком. Разумеется, при этом нужен был какой-то полигон для отладки технологий.
Работал я в то время фрилансером на небольших проектах. Практически каждый день утром по часу времени посвящал изучению документации Java и Spring, а также книг и туториалов, связанных с этими технологиями.
Переписывать в очередной раз игрушку было, конечно, жалко. Но другого подходящего проекта я не нашёл. Сервер питомцев полностью переписал на Spring MVC, пытаясь по максимуму охватить изучаемые технологии:
Spring Core
Spring MVC
Spring Security
JSP/JSPX
JUnit
Клиентская часть была переписана на Spring Core. Spring Framework всегда позволял (да и сейчас позволяет) создавать десктопные приложения с использованием своего контейнера.
Попутно при этом переписывании пришлось избавить от игры в карты и общего мира с собиранием монеток. А от нескольких видов питомцев остался только один — симпатичный котик.

В тот момент у меня уже появился мой сайт (ссылку можете посмотреть в моём профиле), на котором я публиковал статейки по изучаемым технологиям. Сайт был практически девственно чист, лишь небольшие записи появлялись там практически каждую неделю. Это сейчас там больше 1000 статей различного содержания. Тогда всё было гораздо проще.
Затем я устроился на полноценную работу в один из крупных банков и на какое-то время забросил свой пет-проект с виртуальными питомцами.
Спустя ещё много лет я выпустил первую книгу мы с тем же самым издательством договорились написать вторую книгу. Вторая книга целиком посвящена Spring.
По задумке в книге должен был быть какой-то большой проект. Этакий проект-пример. Проект-полигон. На этом проекте должны были показываться все (ну или хотя бы большая часть) примеров из книги.
Проект игры виртуальных питомцев пришлось в очередной раз адаптировать под современные версии Spring, так как с момента прошлого рефакторинга прошло много лет, а также полностью переписать клиентскую часть, так как десктопная клиентская часть на Swing для книги в 2025 году выглядела бы как-то странно и старомодно.
Переписывать клиентскую часть было очень сложно. Тяжело. Далеко не все структуры укладывались в JavaScript. К тому же у меня, разумеется, с первого раза не всё получалось. Приходилось переписывать несколько раз.
Серверную часть после актуализации зависимостей пришлось также несколько раз переписывать. Основной целью был не сам проект. Основной целью была книга про Spring. Когда я сталкивался с тем, что в новой главе не хватает примера в основном проекте, мне приходилось рефакторить основной проект, при этом иногда задевались и предыдущие главы книги. Практически невозможно сделать всё идеально с первого раза. Каждый раз меня это огорчало.
Особенно глава про Spring Security далась мне нелегко. Мне пришлось несколько раз рефакторить проект и несколько раз перечитывать официальную документацию. Я думаю, что я в итоге неплохо разобрался с этой темой.
Финальный вариант книги состоит из 15 глав.
Глава 1. Теория
Описываются теоретические сведения, необходимые для понимания общего подхода к разработке приложений с использованием Spring. Особое внимание уделяется внедрению зависимостей, инверсии управления и аспектно-ориентированному программированию.
Глава 2. Микросервисы
Описание основных компонентов микросервисной архитектуры. Преимущества микросервисной архитектуры и её отличие от монолита.
Глава 3. Примеры приложения
Подробная инструкция с картинками и пошаговым описанием процесса получения исходников тестового приложения с игрой про виртуальных питомцев, используемого в книге.
Глава 4. Первые шаги
Создание минимального приложения на Spring Framework и Spring Boot с описанием каждого шага.
Глава 5. Модуль Spring Core
Описание способов объявления бинов Spring и внедрения зависимостей. Два способа конфигурирования Spring: XML-конфигурация и Java-конфигурация. Разделение конфигурации по файлам. Использование профилей и загрузка настроек из файлов. Этапы жизненного цикла бинов и добавление к ним логики.
Глава 6. Аспектно-ориентированное программирование
Два способа создания прокси. Листинги примеров использования АОП для различных срезов. XML-конфигурация АОП и Java-конфигурация АОП.
Глава 7. Работа с базами данных
Различные способы создания слоя постоянства: Spring JDBC, JPA + Hibernate, Spring Data JPA. Конфигурирование бинов слоя постоянства. Liquibase для отслеживания и управления изменениями базы данных.
Особое внимание уделено созданию слоя постоянства с JPA + Hibernate:
Описание сущностей JPA
Описание связей 1:М, М:1, М:М
Critera API
Генерация первичных ключей
Оптимистичная блокировка
Описание сложных сущностей JPA
Стратегии именования
Проблема N+1
Состояния сущностей
Для каждого метода описано два случая: один для JPA + Hibernate, а другой для Spring Data JPA.
Глава 8. Хранение настроек приложения
Описывается хранение настроек в файлах и использование профилей. Основной упор сделан на использование Spring Cloud Config. В книге приведён полноценный пример настройки Spring Cloud Config для тестового приложения.
Глава 9. Логирование.
Сложная тема. В Java с этим далеко не всё так просто. В книге разбирается, почему появилось такое огромное количество библиотек логирования, и как с этим теперь жить. Подробно расписывается пример настройки стека ELK для приложения виртуальных питомцев.
Глава 10. Локализация.
Тестовый пример с игрой виртуальных питомцев поддерживает два языка: английский и русский. В этой главе расписывается поддержка перевода на разные языки и адаптации приложения к разным форматам дат, времени и денег, принятых в разных странах с помощью Spring.
Глава 11. Разработка веб-приложения
Большая глава, затрагивающая вопрос написания веб-приложения с помощью Spring MVC, созданию страниц на Jakarta Pages и на Thymeleaf.
Глава 12. Фреймворк Spring Security
Очень хорошая глава. Я несколько раз рефакторил тестовый пример, чтобы сделать эту главу максимально показательной. Пока я писал эту главу, то сам понял, как работает Spring Security. Описывается архитектура Spring Security, подключение его к проекту, и настройка для различных зон. В приложении-примере разделены зона сайта и зона API клиента. К каждому из них настраивается свой SecurityFilterChain. В книге дано описание настройки аутентификации, авторизации, включения CSRF и CORS. Описана интеграция Spring Security с шаблонизаторами Jakarta Pages и Thymeleaf.
Глава 13. Документирования REST-сервисов
Генерация документации OpenAPI и Swagger UI.
Глава 14. Тесты
Описывается написание тестов как с помощью JUnit так и TestNG. Использование Mockito. Приведён пример написания теста, поднимающего контекст Spring.
Описано тестирования контроллеров с помощью MockMVC, а также интеграция MockMVC и Spring Security.
Глава 15. Клиентское приложение
Клиент игры про виртуальных питомцев, используемый в книге, написан на JavaScript. Само приложение клиента представляет из себя Progressive Web Application. Имеется возможность установки на смартфон. В этой главе дан пример использования клиента и его внешний вид.
Окончательно книга вышла в продажу в самом начале 2025 года. Я правда, рад, что она уже вышла. Я действительно вложил в неё очень много труда за эти годы и чувствую, что сильно устал. Надеюсь, что мои труды будут кому-нибудь полезны.
В процессе написания книги в 2024 году я вёл полноценный дневник, где периодически описывал текущее состояние книги, а также всякие глупые мысли, которые у меня возникали в процессе работы. Весь дневник находится на моём сайте.
ISBN | 978-5-9775-2049-2 |
Количество страниц | 384 |
Формат издания | 165 x 215 мм |
Печать | Черно-белая |
Год | 2025 |
Купить экземпляр книги можно на сайте издательства.