Что это такое

На Википедии написано, что Spring Framework это "универсальный фреймворк с открытым исходным кодом для Java-платформы", что не очень-то помогает понять, что же это все-таки такое.

В целом Spring - это огромный комбайн для написания приложений на Java (исторически - для создания веб-сервисов, хотя в принципе наверное можно использовать и для других видов приложний). В его основе лежат несколько базовых принципов и паттернов управления жизненным циклом приложения и объектами в нем. Плюс к нему прикручено очень много опциональных дополнительных модулей - работа с БД, обработка HTTP запросов, авторизация пользователей, HTML шаблонизатор и много чего еще. В итоге сложно описать Spring парой слов - там слишком много всего разного намешано.

Неплохой обзор основ есть в статье https://habr.com/ru/post/490586/, приведем тут некоторую выжимку.

Из чего состоит Spring

В основе своей Spring реализует паттерны Inversion of Control и Dependency Injection. Подобные фреймворки еще называют IoC контейнером.

Это объемная и не самая легкая для понимания начинающими тема, которую мы попытаемся разобрать в следующей главе Inversion of Control и Dependency Injection. А пока нам будет достаточно того, что вы передаете управление фреймворку, и дальше он работает сам. Сам создает нужные экземпляры ваших классов, сам вызывает ваши методы в нужный момент (например, когда пришел сетевой запрос - Spring вызовет ваш метод-обработчик).

Умение создавать объекты и связывать их друг с другом - это основа, поверх которой работают все остальные части Spring. Всего их довольно много, полный список можно найти в документации https://spring.io/projects/spring-framework. Перечислим основные, встречающиеся в большинстве веб-сервисов:

  1. Spring Data - работа с различными видами БД. Частично будет рассмотрено нами в главе Работа с БД через Hibernate

  2. Spring Web MVC - все необходимое для создания веб-сервиса, от API и классов для обработки HTTP запросов до генерации HTML страниц.

  3. Spring Security - авторизация пользователей, сессии, проверки прав доступа.

И много-много всего другого, от специфичных проектов типа Spring Messaging, работающих с очередями сообщений (востребовано в высоконагруженных системах) до мелочей типа сериализации объектов в JSON и иные популярные в вебе форматы.

Если чего-то нет в самом Spring - скорее всего, где-то будет библиотека, добавляющая поддержку этого. Хоть авторизация через соцсети, хоть интеграция с какими-то сторонними сервисами - что угодно можно найти и прикрутить к своему приложению.

Spring очень старый

Первая версия Spring вышла аж в 2002 году. С тех пор он рос, развивался, а потом снова рос.

Из его огромной популярности в Java мире и из его солидного возраста следует два вывода:

  1. В интернете вы найдете ТОННЫ информации по Spring. Туториалы в любом формате, учебные проекты, видео, тексты, что угодно. Любая проблема, которая может возникнуть у вас, скорее всего уже давно решена кем-то в интернете, надо лишь погуглить. На Stackoverflow тысячи вопросов и ответов по Spring. Нет проблем с недостатком информации.

  2. Информация эта в основном устаревшая. Spring реально старый (ну, по ИТ-меркам). Он старше, например, чем механизм аннотаций в Java (который появился только в 5 версии языка в 2004 году). Поэтому первые годы для конфигурации и описания классов приходилось использовать XML файлы. И вы до сих пор найдете в интернете кучу уроков и туториалов с XML конфигурацией, хотя в здравом уме никто не будет ей пользоваться в современных проектах. Поэтому изучая ответы на вопросы - всегда смотрите на дату. Ответы из нулевых и начала десятых годов вам, скорее всего, не помогут, только запутают еще больше.

Типичный фрагмент устаревшего ответа десятилетней давности, использующего XML конфигурацию

Spring Boot

В какой-то момент количество телодвижений, необходимых для создания нового проекта на Spring, выросло настолько, что людей это стало реально напрягать. И тогда появился проект Spring Boot.

Под этим названием авторы Spring создали ряд инструментов, упрощающих развертывание новых проектов. Среди них:

  1. Spring Initializr - веб-сервис и плагины для IDE, позволяющие сгенерировать "скелет" нового Spring проекта. Вы просто ставите галочки напротив нужных фич Spring, выбираете язык, систему сборки и ряд других параметров, и получаете готовый пустой проект, в котором уже все настроено и подключено как надо.

  2. Новые группы модулей и зависимости. Теперь чтобы начать использовать БД вместе с механизмом JPA, вам надо лишь подключить зависимость spring-boot-starter-data-jpa. А не возиться с кучей отдельных пакетов

  3. Хорошие настройки по умолчанию. Если раньше нужно было писать километры XML конфигов или десятки аннотаций, то теперь для большинства часто встречающихся случаев достаточно проставить всего парочку. Остальное Spring Boot сделает сам (найдет нужные классы, настроит все как надо).

  4. Встроенный веб-сервер. Поскольку чаще всего Spring используется именно для веб-приложений, удобно иметь возможность в два клика запустить ваше приложение во встроенном веб-сервере прямо из IDE, а не возиться со сборкой в какой-нибудь .war пакет и выкладкой в отдельный веб-сервер.

Подробнее можно почитать, например, на Хабре: https://habr.com/ru/post/435144/

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

Spring Boot "относительно" новая часть Spring, во всяком случае появился он уже в десятых годах. Так что если гуглить не "Spring название проблемы", а "Spring Boot название проблемы", то это позволит отсечь совсем уж древние статьи и ответы.

Популярность Spring

Spring может быть крепким орешком для новичков: слишком много сложных концепций, конфигурации, неочевидных взаимодействий. И первое время вы, скорее всего, будет пребывать в непрерывной фрустрации: "А-а-а, зачем так сложно?!"

С опытом придет понимание, что сложность, как правило, оправдана, а каждое нетривиальное решение обсуловлено тем, что на больших проектах иначе получается очень плохой код.

А пока это понимание не пришло - можно просто посмотреть на hh.ru. Где в Санкт-Петербурге треть вакансий по Java - это как раз Spring. И вакансии на з/п в 200-300 тысяч рублей часто выглядят как:

В следующих главах мы пройдемся по основным технологиям и составным частям Spring, применяющимся в разработке веб-сервисов.

Last updated