Включите исполнение JavaScript в браузере, чтобы запустить приложение.
13 ноя 2024

Фреймворк Spring — что это такое и зачем нужен

Что такое Spring, как устроен фреймворк, его основные и дочерние модули. Кто пользуется Spring и для чего он нужен. Преимущества и недостатки фреймворка. Как начать использовать Spring, подготовить IDE и JDK и создать первый проект — обо всем читайте в нашей статье.

Что такое Spring

Spring Framework — это бесплатный фреймворк с открытым исходным кодом, созданный для разработки бизнес-приложений на Java. При этом им также могут пользоваться разработчики на Kotlin и Groovy — эти языки официально поддерживаются.

Целью создания фреймворка являлось предоставить разработчикам удобные, универсальные и мощные инструменты для проектирования и разработки приложений, включая распределенные системы. Частично эта цель достигнута за счет модульной структуры фреймворка. Каждый модуль — это инструмент для решения конкретных задач, а разработчик может подключать только нужные в данном случае модули.

История создания

Мотивацией к разработке фреймворка стало отсутствие инструментов, способных действительно упростить разработку корпоративных приложений на Java. В 2002 году Род Джонсон опубликовал книгу «Expert One-on-One J2EE Design and Development», идеи которой легли в основу фреймворка. Уже год спустя Род Джонсон, а также двое его коллег создали открытый проект, а в марте 2004 года был выпущен Spring Framework 1.0. Этот инструмент стал своеобразным прорывом, так как смог решить проблемы разработчиков. Он быстро набрал популярность и активно развивался в следующие годы.

В 2011 году появились новые модули Spring Data MongoDB, Redis, Neo4j, GemFire, которые позволили разработчикам взаимодействовать с NoSQL базами данных. В 2014 году был выпущен Spring Boot, который еще больше упростил разработку приложений на Java за счет готовых конфигураций. Они позволяют разработчикам тратить меньше времени на настройку фреймворка. В 2022 году вышли версии Spring Boot 3 и Spring Framework 6, в которых время запуска приложений было сокращено за счет применения GraalVM.

Как устроен Spring и его основные модули

Фреймворк имеет модульную структуру, так как состоит из нескольких связанных друг с другом компонентов (модулей). Разработчики могут подключать только те модули, которые нужны им для решения задачи. Ниже представлены основные компоненты фреймворка.

Spring Data

Spring Data — это компонент, предназначенный для работы с разными типами баз данных (SQL и NoSQL), например, MySQL или Apache Cassandra. Этот модуль содержит несколько внутренних компонентов, совместимых с разными базами данных. На сайте фреймворка говорится о том, что эти компоненты разрабатываются в сотрудничестве с компаниями-разработчиками баз данных. Основная цель разработки этого модуля — создать инструмент, который даст программистам возможность легко взаимодействовать с базами данных, при этом учитывая особенности каждой из них.

Spring Cloud

Это модуль, содержащий инструменты для разработки распределенных систем и микросервисов. Они нужны, чтобы быстро решать повторяющиеся при разработке распределенных систем задачи. Например, управление конфигурацией, реализация паттерна circuit breaker, создание умной маршрутизации (intelligent routing). Так сокращается общее время разработки системы. Этот модуль помогает налаживать взаимодействие между компонентами системы, выполнять балансировку нагрузки и проводить контрактное тестирование. Он тоже содержит дополнительные компоненты, которые можно использовать только тогда, когда этого требует задача.

AOP-модуль

В основе фреймворка лежит аспектно-ориентированная парадигма программирования. Такой подход нужен, чтобы отделять бизнес-логику программы от сквозной функциональности/аспектов (безопасность, логирование, кеширование и другие). Зачем это нужно? Существуют задачи, которые должны выполняться в нескольких частях программы, при этом к основной логике приложения они не относятся. Вместо того чтобы внедрять их в каждую часть программы, АОП позволяет создавать аспекты, которые будут отделены от основной логики приложения. Например, если вынести в отдельный аспект политику безопасности, то ее можно будет модифицировать, не затрагивая основные компоненты программы. При таком подходе код становится простым, повышается его читаемость и модульность.

Модуль транзакций

Транзакции — это набор операций, который должен выполниться как единое целое: либо выполняются все операции, либо ни одна из них. Пример транзакции — это денежный перевод в банковском приложении. Если, например, возникнет ошибка при зачислении денег на счет получателя, то транзакцию необходимо отменить (как минимум, чтобы деньги вернулись на счет отправителя). Фреймворк же предоставляет инструменты для гибкого управления и безопасной работы с транзакциями: поддержка вложенных, глобальных и локальных транзакций и обработка исключений.

Spring Boot

Spring Boot — это часть экосистемы Spring, которая разработана для упрощения и ускорения разработки приложений на базе фреймворка. Этот модуль предоставляет starter-пакеты для разных задач, например, создание веб-приложения, и может автоматизировать конфигурацию — разработчику не нужно прописывать ее вручную. Spring Boot позволяет развертывать приложения проще за счет встроенных веб-серверов Tomcat, Jetty или Undertow. Этот модуль часто используют для разработки микросервисов, так как предоставляет необходимые инструменты для таких задач.

Дочерние фреймворки

Дочерние фреймворки могут использоваться как вместе со Spring, так и с другими технологиями. Рассмотрим несколько из них:

  • Spring Security. Это модуль, который нужен для обеспечения безопасности приложений. Он поддерживает различные механизмы аутентификации, позволяет управлять правами пользователей, а также создавать сложные механизмы аутентификации и авторизации;
  • Spring Integration. Этот фреймворк предоставляет набор готовых шаблонов интеграции, позволяет наладить взаимодействие с внешними системами, а также обмен сообщениями между компонентами приложения;
  • Spring Roo. Этот инструмент создан для, в первую очередь, быстрой разработки корпоративных приложений на Java. Высокая скорость разработки в том числе достигается за счет реализации подхода «соглашение прежде конфигурации».

Кто пользуется Spring

Фреймворк используется Java-разработчиками для создания (проектирования и разработки) различных видов приложений (десктопные, мобильные и веб-приложения), также он может использоваться Kotlin- и Groovy-разработчиками. Иногда фреймворк применяется backend-разработчиками.

Если же говорить о компаниях, то известно, что инструмент используется Netflix для управления микросервисами, популярной в Китае площадкой для торговли Alibaba, а также для создания приложений крупных банков.

Для чего нужен Spring

  • Упрощение проектирования и разработки приложений. Разработчикам не нужно вручную устанавливать и управлять зависимостями, самостоятельно решать часто возникающие задачи (для этого есть шаблоны). За счет этой особенности они могут сфокусироваться на логике приложения. Также фреймворк может интегрироваться с другими инструментами, например, RabbitMQ или AWS.
  • Создание микросервисов. Сейчас многие корпорации выбирают микросервисную архитектуру для своих приложений, а Spring Boot и Cloud содержат готовые решения для создания таких приложений.
  • Работа с базами данных. Для этого предусмотрен модуль Spring Data, который предлагает инструменты для взаимодействия с реляционными/нереляционными БД.

Особенности фреймворка

Spring имеет несколько фундаментальных особенностей, за счет которых он выделяется на фоне других фреймворков: универсальность, облегченность и поддержка инфраструктуры.

Универсальность

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

Облегченность

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

Поддержка инфраструктуры

Во фреймворке реализован принцип IoC (инверсия контроля). Это означает, что задачи управления зависимостями либо полностью, либо частично снимаются с разработчика — вместо него этим занимается сам фреймворк.

Преимущества фреймворка

Облегчение и ускорение работы

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

Масштабность

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

Сообщество

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

Открытый исходный код

Фреймворк имеет открытый исходный код и бесплатно распространяется под лицензией Apache 2.0. Это означает, что его можно свободно использовать, модифицировать, распространять и, соответственно, применять в коммерческих и некоммерческих проектах. В случае с Spring это особенно важно, так как многие инструменты для Java закрыты и распространяются под проприетарными лицензиями. Это не позволяет изучать их широкому кругу людей и уж тем более новичкам. Как и в случае с другими открытыми проектами, пользователи могут изучать внутреннее устройство, адаптировать Spring и оценивать его надежность.

Недостатки

  • Сложность. Большое количество модулей, а также реализованных внутри фреймворка концепций могут с легкостью запутать разработчиков, которые только начинают знакомство с ним. В начале изучения этого инструмента точно стоит внимательно изучить документацию и обучающие материалы, которых в интернете достаточно.
  • Долгая настройка. Когда разработчик начинает новый проект, ему приходится тратить достаточно времени на конфигурацию приложения, но иногда эту проблему можно решить использованием Spring Boot.

Как создать первый проект Spring

До начала изучения инструмента, конечно, лучше уже иметь практический опыт разработки на Java — это не обязательно должны быть коммерческие проекты, учебные тоже подойдут. Непосредственно перед и в начале изучения фреймворка лучше опираться на обучающие материалы, например, видео или руководство на официальном сайте. 

Подготовка IDE и JDK

Прежде чем начать работать с фреймворком, необходимы IDE (интегрированная среда разработки) и JDK (Java Development Kit). IDE можно выбрать любую, например, IntelliJ IDEA, Spring Tools, Visual Studio Code или GigaIDE. Относительно JDK в руководстве от разработчиков есть рекомендация использовать BellSoft Liberica JDK версии 17.

Создание проекта на Spring Boot

Чтобы создать проект, нужно воспользоваться этим сайтом. При переходе на него откроется страница, где необходимо кликнуть на кнопку «ADD DEPENDENCIES» и выбрать зависимость Web. Затем нужно нажать на кнопку «GENERATE», загрузить ZIP-архив, распаковать его в нужной папке. Также здесь можно выбрать версию Spring Boot — рекомендуется просто выбрать последнюю версию (но без пометки SNAPSHOT).

После этого в IDE необходимо открыть проект, а затем добавить туда какой-то код. В руководстве на сайте представлен пример кода для создания простого веб-сервиса — для изучения фреймворка можно воспользоваться этим примером.

Запуск кода

Чтобы собрать и запустить приложение, необходимо воспользоваться командной строкой или терминалом. Затем нужно перейти в корневую директорию проекта и выполнить одну из этих команд:

  • для MacOS/Linux

./mvnw spring-boot:run

  • для Windows 

mvnw.cmd spring-boot:run

Если код из примера добавлен правильно, и все прошло успешно, то при переходе по адресу http://localhost:8080/hello будет выведено сообщение «Hello World!» (если параметр name изменялся, то сообщение будет отличаться).

Параметр name еще можно передать так:

http://localhost:8080/hello?name=Anna

Тогда будет выведено сообщение «Hello Anna!»