### Spring Spring — это самая популярная веб-экосистема в Java. Состоит из целого набора фреймворков разного назначения: работа с БД, облаками, безопасностью, и многое другое. Да, у него есть менее популярные альтернативы, но с высокой долей вероятности на работе ты столкнешься именно с ним. Так что добро пожаловать в «Весну». #### Spring Core Как у Java есть свой базовый Core, так есть он и у Spring. Стоит хорошенько разобраться в его составе, чтобы когда ты поднимешься на абстракцию выше, в Spring Boot, он не показался тебе загадочной магией. ##### Книги ###### Craig Walls. «Spring in Action 4» Обрати внимание **именно на 4-е издание**. Да, мы в курсе, что есть шестое. Да, мы в курсе, что перевод на русский есть только на третье издание. Но в шестом издании нет подробного описания подкапотного устройства и выкинута настройка с помощью XML. Ты можешь подумать: «Какой XML, сейчас везде используют аннотации?», но твой будущий работодатель запиливший систему в мохнатых годах может не разделять твоё прогрессивное мнение. Так что читай 4-е издание и наслаждайся. Книга стоит того. ##### Курсы На Udemy есть хороший инструктор, John Tompson, который шпарит курсы по Spring как автомат. Не обходи его вниманием и загляни [сюда](https://www.udemy.com/course/spring-core/). Рассматривается более старая версия Spring (4), но за 6 часов даётся вполне неплохая база по Spring и затрагивается работа со Spring MVC. ##### Официальная документация Казалось бы, зачем мы явно включили официальную документацию, если с самого начала усвоили, что стоит начинать поиск с неё? Однако со Spring ситуация несколько иная. Его документация ВОСХИТИТЕЛЬНА. Серьезно, эта документация одна из весомых причин, почему Spring так быстро завоевал популярность. Подробнейшие описания концептов Spring, сопровождаемые примерами кода, и многое, многое другое. Начни своё путешествие [отсюда](https://docs.spring.io/spring-framework/docs/current/reference/html/index.html) и поверь, очень многие вопросы у тебя не появятся, если ты внимательно ознакомишься с этими материалами. ##### YouTube Широко известный в узком кругу лиц, Евгений Борисов периодически выступает с докладами, в которых разбирает устройство Spring по кусочкам. Делает он весьма весело, задорно и понятно. Рекомендуем приобщиться к его докладам: * [Spring-потрошитель](https://www.youtube.com/watch?v=BmBr5diz8WA); * [Spring-построитель](https://www.youtube.com/watch?v=rd6wxPzXQvo). Несмотря на то, что видео длится 2-4 часа, смотрится оно как отличный сериал. Крайне рекомендуем к просмотру. #### Spring Boot Spring Boot — это абстракция над абстракциями. Разработчики взяли обычный Spring, полезные библиотеки и упаковали всё это в фреймворк более высокого (по абстракции) уровня. Меньше бойлерплейта и головной боли, больше магии и головной боли. По причине бОльшего удобства и увеличенной скорости разработки, Spring Boot вытесняет классический Spring, так что в своих проектах смело используй именно его. ##### Курсы Помнишь John Tompson? Даже если нет, самое время навернуть его 60-часовой [курс](https://www.udemy.com/course/spring-framework-5-beginner-to-guru/) по Spring Boot. В нем также затрагивается работа со Spring MVC, Spring Data и немножко Hibernate. Объясняет доступно, много примеров, простой английский язык. Полностью стоит своих денег. #### Spring Data Spring Data это целый набор различных продуктов, объединенных одной целью: упростить разработчику жизнь, предоставив ещё более высокий уровень абстракции для работы с данными. Продуктов этих довольно много (с полным перечнем можешь ознакомиться [здесь](https://spring.io/projects/spring-data)), но на текущем этапе обрати внимание на Spring Data JPA. Если Hibernate — это абстракция над JDBC, то Spring Data — это по большей части абстракция над ORM-фреймворками. Hibernate там включен по умолчанию, но никто не заставляет использовать под капотом именно его. Что же за удобные абстракции дает нам данный фреймворк? В первую очередь это репозитории. Возможно ты слышал про [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete). Так вот, Spring позволяет по мановению волшебной палочки добавить к твоим сущностям эти самые CRUD-методы. Здорово, правда? Нам не нужно писать каждый раз стандартные методы, копипастить один и тот же код. За нас это всё делает машина, а мы просто пользуемся удобным API. В остальном — это куча других плюшек, о пользе которых сейчас ты вряд ли будешь задумываться. Для начала работы со Spring Data JPA тебе будет достаточно твоего опыта с Hibernate и чтения вводной документации от самого Spring. #### Spring Web MVC Сама MVC — это крайне популярная схема разделения мух от котлет. Модели (данные) отдельно, представление данных отдельно, связующий клей из контроллеров, которые обрабатывают действия пользователей и передают их кому надо отдельно. Удобно, меньше шансов сломать всё к чертям при доработках, народу нравится. Конкретно Spring Web MVC помогает нам в реализации проектов с использованием данной схемы, предоставляя всё то, что мы так любим: абстракции, сахар и магию. Ну и например аннотации для разметки контроллеров, удобную настройку реквестов, работу с эндпоинтами и многое другое. Чтобы узнать его получше, обратись к старой доброй [документации](https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#spring-web). #### Spring Security После того, как ты создал своё web-приложение, вероятно, ты захочешь предоставить к нему доступ для пользователей. А где пользователи, там и логины и пароли. А где пароли, там и безопасность, личные данные, кросс-авторизации и злобные хакеры. Чтобы не страдать от головной боли, для нас создали фреймворк Spring Security, который дает нам удобный API и абстракции (в который раз), чтобы сделать наше приложение безопасным и надежным. Более подробно можно ознакомиться: - Приобщившись к официальной [документации](https://spring.io/projects/spring-security); - Прочитав отличную книгу «Spring Security in Action». #### Упражнения К сожалению набора задачек по Spring в классическом виде не существует. Но тут тебе может помочь HyperSkill, в котором есть учебные web-проекты; примеры проектов от самого Spring, например знаменитый PetClinic и реализация собственных пет-проектов. Давно хотел собственного телеграм-бота? Самое время начать его пилить с помощью Spring.