Книга Крейга Уоллса «Spring в действии»

Всем привет! Пару лет назад я присоединился к проекту, бэкенд для которого мы пишем на связке Java + Spring. Для меня переход на этот стек тогда стал неожиданностью, поскольку если о Java я еще имел представление, то вот фреймворк Spring для меня был абсолютно неизвестной вещью. Тогда я его начал осваивать по разным англоязычным книгам. И одна из книг, с которой я начал свое знакомство со Spring была книга «Spring in Action» Крейга Уоллса. Правда, тогда я из нее прочитал только несколько глав, а потом, когда уже стал что-то писать самостоятельно для проекта, переключился на разные статьи, которые бы освещали те элементы фреймворка, которые мне нужны были в конкретный момент.

Когда весной из рассылки издательства ДМК Пресс я узнал, что готовится к выходу эта книга на русском языке, я решил, что неплохо было бы ее почитать и сделал предзаказ. Все-таки изучать какие-то крупные библиотеки или новые для себя языки программирования я предпочитаю по книгам — так выстраивается более цельная картина. Если их изучать по статьям, то знания напоминают пазл, собранный отдельными островками, которые еще надо постараться связать между собой.

И вот на днях я эту книгу дочитал. Не могу сказать, что теперь уже на меня эта книга произвела большое впечатление, но понимаю, что тогда, два года назад, когда только начинал разбираться со Spring, ее стоило дочитать. Дело в том, что это достаточно объемная книга, более 500 страниц, но при этом все равно после нее остается впечатление как после длинной, но обзорной экскурсии, когда вас возят по огромному городу на автобусе, говорят «посмотрите налево, здесь у нас то-то, а теперь посмотрите направо, там у нас это», но при этом очень не хватает углубленного погружения.

На самом деле в этом трудно винить автора, в книге бесполезной воды нет совсем. Скорее наоборот, сложилось впечатление, что автору очень тяжело дались короткие введения к каждой главе на треть страницы, где он пытается отойти от технического описания и более художественно описать то, о чем пойдет речь далее. Просто сам фреймворк настолько огромен, что если хоть немного рассказать о тех частях, о которых речь идет в книге (скоро я их перечислю), то уже получится толстая книга. Она, собственно, и получилась. Темы некоторых глав достойны отдельных книг, и они действительно существуют. Поэтому книгу «Spring в действии» вполне можно рекомендовать тем, кто только начинает изучать Spring, и у кого есть время прочитать 500 страниц прежде чем начать что-то писать. Хотя начинать писать код можно уже после прочтения первых глав, причем главы можно читать в произвольном порядке, после первых глав они мало между собой связаны. Но для более углубленного изучения фреймворка хотелось бы найти что-то еще.

Давайте теперь пройдемся по главам книги «Spring в действии», чтобы было понятно, какие части Spring в ней описываются. Сразу надо сказать, что когда мы говорим о Spring, подразумевается также и Spring Boot, все примеры в книге построены на их связке. Кстати, один из недостатков книги, что ничего не говорится о способах создания бинов (beans), об их жизненном цикле, в какой момент они создаются и каким образом «под капотом» внедряются зависимости. Это было, пожалуй, главное разочарование в книге, потому что я надеялся, что в таком толстом манускрипте все-таки найдется место для того, чтобы рассмотреть, как Spring работает внутри. Но, к сожалению, автор ограничился только лишь описанием внешнего фасада.

В первой главе после небольшого введения о том, что такое Spring и Spring Boot автор без промедления начинает создавать пример веб-приложения с unit-тестами. Приложение пока содержит единственную страницу с картинкой, но уже использует Spring MVC с шаблонизатором Thymeleaf. Этот пример нужен в основном для того, чтобы представить работу со Spring в целом, пока не углубляясь в то, как оно работает.

Уже следующая глава посвящена более подробному описанию процесса создания веб-приложения с рассказом о том, как обрабатывать различные виды HTTP-запросов (GET, POST, DELETE и т.д.), как использовать шаблонизатор Thymeleaf, как получать и обрабатывать данные, полученные с форм. К сожалению, описание Thymeleaf здесь очень поверхностное и описываются только тот небольшой набор возможностей, который используется в создаваемом приложении. Для полноценного понимания работы Thymeleaf этой книги будет не достаточно. Зато перечисляются еще несколько возможных альтернативных шаблонизаторов.

Пара глав посвящены работе с системами управления базами данных, причем как реляционными, так и не реляционными (Cassandra и MongoDB). Что касается реляционных баз данных, то автор показывает несколько альтернативных способов доступа к данным — с помощью JDBC, а также с помощью JPA. В книге неплохо описана работа с репозиториями JPA и то, как без написания кода, только объявляя методы в интерфейсе репозитория с именами, удовлетворяющими определенным требованиям, можно создавать методы для многих видов запросов. Но, к сожалению, ничего не сказано, как писать запросы вручную, если возможностей автоматически генерируемых запросов не хватает.

Что касается самих систем управления базами данных, то про их особенности практически ничего не говорится. С одной стороны понятно, что эта книга не про СУБД, но все-таки обидно, когда весь материал про работу с Cassandra и MongoDB на двоих занимает всего лишь 20 страниц. Но по крайней мере показаны примеры разметки данных и запросы к этим базам данных.

Целая глава посвящена Spring Security — компоненту библиотеки, который позволяет настраивать доступ к различным адресам приложения в зависимости от различных условий. Этой главе я бы поставил твердую пятерку, в ней очень доходчиво и последовательно все описано с несколькими справочными таблицами по методам конфигурации. Чуть позже, уже в другой главе будет очень подробно объявляться принцип работы технологии OAuth2 с примером его использования, а еще позже, когда автор расскажет о реактивном программировании и проекте Reactor, будет описано, как Spring Security нужно настраивать в асинхронном приложении.

Еще одна глава посвящена конфигурации приложения и профилям. По сути эта глава рассказывает о том, как можно менять поведение или настройки приложения без перекомпиляции приложения. В этой главе все бы было хорошо, если бы автор свел бы все возможные способы изменения конфигурации или в какую-то табличку или бы просто показал последовательно все способы один за другим (через параметры командной строки, через переменные окружения, через файлы конфигурации). Жаль, что в главе про конфигурацию перечисляются только лишь несколько способов изменения настроек, хотя при желании их можно насчитать больше десятка.

Последующие главы (а я пока только перечислил треть из них) посвящены технологиям так или иначе связанным с микросервисной архитектурой, REST, развертыванию и всего такому прочему. Отдельная не очень большая глава (страниц на 20) посвящена созданию REST API и взаимодействию с другими сервисами по HTTP. В этой главе мне понравилось, что несмотря на ее обзорность (как и остальные темы), автор очень аккуратно обходится с протоколом HTTP. Например, при удачном создании объекта с помощью POST-запроса, он возвращает не просто код 200 (OK), а 201 (Created), как приписано стандартом. Аналогично и при удалении объекта приложение возвращает код 204 (No Content). В этой же главе упоминается такая вещь, связанная с REST, о которой многие забывают или игнорируют — это гипермедиа.

Достаточно много внимания автор уделяет асинхронному программированию и асинхронному обмену сообщений. Теме асинхронного программирования с использованием WebFlux и Project Reactor будет посвящен целый раздел из четырех глав, но перед этим одна глава рассказывает об асинхронном обмене сообщений между сервисами с помощью трех технологий: JMS, RabbitMQ и Kafka. Как минимум о RabbitMQ и Kafka пишут целые книги (спойлер: в августе на русском языке выйдет книга Скотта, Гамова и Клейна «Kafka в действии» и я ее себе уже предзаказал, как только ее прочитаю, напишу про нее обзор), а здесь на скорую руку можно ознакомиться с тем, как начать работать с этими системами, не вдаваясь в подробности их работы.

Еще одна глава посвящена библиотеке Spring Integration, предназначенной для построения потоков данных в приложении, когда нужно соединить в одно целое конвейер обработки данных из разных источников. Я не знал о существовании такой библиотеки, правда пока еще не понял, когда имеет смысл ее использовать, а когда это будет стрельба из пушки по воробьям. Но как минимум уже в этом данная книга оказалась полезной.

И после всего этого начинаются главы, посвященные Project Reactor (о чем я уже несколько раз упоминал). Тут тоже все хорошо написано, но мало. Аккуратно показаны диаграммы обработки данных различными методами Flux и Mono (так называемые мраморные диаграммы), но, к сожалению, автор ограничивается описанием только небольшого количества методов, например, игнорируя методы для обработки ошибок и пустых значений.

Следующая глава показывает, как Reactor используется при создании REST API с использованием WebFlux. Здесь же говорится о тестировании асинхронных запросов с помощью WebTestClient и Mockito (очень жаль, что про Mockito мало что сказано). Причем в этой главе рассматривается взаимодействие с REST API как со стороны сервера, так и со стороны клиента (приводятся примеры того, как асинхронно взаимодействовать с другими сервисами через HTTP). Здесь же говорится и об асинхронной версии Spring Security.

Еще одна глава посвящена асинхронному доступу к базам данных. Структура этой главы сильно напоминает главу про доступ к базам данных, которая была в начале. На этот раз для доступа к данным используется асинхронная библиотека R2DBC, а потом снова показано, как асинхронно использовать доступ к MongoDB и Cassandra.

Еще одна глава посвящена использованию протокола RSocket. Это двоичный протокол, о котором, честно говоря, до этого я даже не слышал. Как я понимаю это не совсем мейнстрим, и не уверен, что буду его в ближайшее время использовать, но познакомиться с ним было любопытно, особенно учитывая, что он может работать через веб-сокеты (или поверх TCP).

И, наконец, начинается последняя четвертая часть книги, посвященная развертыванию приложений на сервере и мониторингу. Достаточно неплохо (и, надо сказать, подробно) описана библиотека Actuator, предназначенная для получения информации о запущенном приложении. Причем не просто перечислены пути, по которым можно получить ту или иную информацию, а есть даже примеры создания пользовательских конечных точек, а в завершении главы напоминается, что неплохо было бы защитить большинство точек входа с помощью Spring Security, и показано, как это можно сделать.

Еще одна небольшая глава (страниц на 10) посвящена отдельному проекту Spring Boot Admin, который позволяет создавать веб-интерфейс для мониторинга и настройки других запущенных веб-сервисов. Эта тема плавно перетекает в совсем коротенькую главу про мониторинг запущенного приложения с помощью JMX (Java Management Extensions). И последняя глава посвящена развертыванию. Тут я даже не буду комментировать, потому что нормально описать развертывание с помощью Docker да еще и с Kubernetes на 15 страницах не реально.

Такое вот содержание книги. Как я уже писал в начале, в книге все очень хорошо написано (все правильно и корректно), хорошие не очень длинные примеры по существу, не отвлекающие на сторонние темы. Автор явно хорошо разбирается в этом фреймворке, но попытался впихнуть в книгу невпихуемое (кажется, это слово подходит ко всему фреймворку Spring). Все замечательно, но очень мало. Хотелось бы теперь почитать более глубокое описание всего того же. Но для первого знакомства со Spring очень даже неплохая книга. Я помню свое первое знакомство со Spring, когда начинаешь разбираться с одной частью библиотеки, а она тянет за собой другую библиотеку, с которой надо тоже разобраться. Было тяжело. А здесь описание достаточно последовательное.

Как итог, я бы книге поставил оценку 4 из 5.

PS. Еще один спойлер. Одновременно с этой книгой в издательстве Питер вышла книга Марка Хеклера «Spring Boot по-быстрому». Я ее как раз сейчас читаю. Она в два раза тоньше, и я уже прочитал в ней то, чего нет в книге Крейга Уоллса. Несмотря на название, работа со Spring, там рассматривается чуть глубже, но количество рассматриваемых тем там сильно меньше. Но это я уже начал писать обзор еще не дочитанной книги. Посмотрим, может быть в дальнейшем мнение о ней у меня еще поменяется. На данный момент я прочитал где-то треть книги.

PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.

Пожалуйста, оцените запись

УжасноПлохоТак себеХорошоОтлично (Количество голосов: 1, средняя оценка: 5,00)
Загрузка...

Один комментарий

  1. Арсен:

    интересно

Leave a comment

Subscribe without commenting