Код
#статьи

Фреймворк Spring: зачем он нужен, как устроен и как работает

Разбираемся в модулях фреймворка и в их основных различиях, запускаем на компьютере и создаём первый проект.

Иллюстрация: Colowgee для Skillbox Media

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

Иногда Spring называют фреймворком фреймворков, поскольку он состоит из отдельных модулей: Struts, Hibernate, Tapestry, EJB, JSF и других. Каждый модуль — это набор инструментов для решения технических задач, объединённых общей логикой Spring.

Давайте разберёмся, почему появился фреймворк Spring и как с ним работать на примере Java.

Как появился Spring и зачем он был нужен

Для разработки веб-приложений программисты долго использовали JavaBeans. Это классы в языке Java, написанные по определённым правилам. Они облегчали разработку компонентов пользовательского интерфейса, но были сильно ограничены в своих возможностях. Например, с ними нельзя управлять транзакциями и безопасностью или реализовывать многопоточность, что очень важно для больших приложений.

Чаще всего эти проблемы беспокоили тех, кто разрабатывал корпоративные приложения, направленные на решение конкретной задачи в рамках большой компании. Например, бухгалтерское программное обеспечение, управление биллингом или CRM-систему.

Решить проблемы JavaBeans пытались с помощью Enterprise JavaBeans (EJB), технологии для написания и поддержки серверной части приложений. Её внедрение позволило облегчить работу над приложениями для бизнеса, так как в ней уже из коробки были поддержка многопоточности, распределённые транзакции и другие подходы, которые отсутствовали в JavaBeans.

Но работа с EJB сильно усложняла код из-за необходимости реализации методов обратного вызова жизненного цикла, Home- и Remote-интерфейсов, а также других подходов. Поэтому разработчики не успокоились и продолжали искать другое, более удобное решение для создания корпоративных приложений.

И такое решение появилось в июне 2003 года, когда Род Джонсон выпустил первую версию фреймворка Spring. А уже через год, в марте 2004 года, вышла первая стабильная версия фреймворка — 1.0. На июль 2022 года стабильная версия Spring — 5.3.х. Разберёмся, почему именно Spring стал удачным решением для создания корпоративных приложений.

Что такое и как устроен Spring

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

Структура модулей в Spring
Инфографика: Spring Framework

Вот какие популярные модули входят в состав Spring.

Spring Data

Модуль для работы с реляционными и нереляционными базами данных: MySQL, Redis, Microsoft Azure Cosmos DB и другими. Включает в себя набор интерфейсов для работы с данными через JPA Entity. Подробно о возможностях модуля написано в официальной документации.

Spring Cloud

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

Кроме непосредственной работы с распределёнными системами Spring Cloud позволяет проводить маршрутизацию, балансировать нагрузку и проводить распределённый обмен сообщениями, что облегчает работу над отдельными задачами. Нюансы работы разобраны в документации к Spring.

AOP-модуль

Java — объектно-ориентированный язык, но Spring основан на другой парадигме: аспектно-ориентированном программировании (АОП).

Аспектно-ориентированное программирование направлено на повышение модульности программы за счёт разделения задач внутри неё. Для этого обычно не меняют существующий код, а дописывают новый.

Классический пример АОП — применение политики безопасности. С одной стороны, она должна применяться ко всем частям приложения, а с другой стороны — быть самостоятельной сущностью, которую можно развивать отдельно от остального кода. Если работать с политикой безопасности по АОП, то она выносится в отдельный модуль и дальнейшая работа над ней, а также поддержка и рефакторинг проводятся независимо от основного приложения.

Подробнее про АОП в Spring написано в официальной документации.

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

Транзакция в Java — это последовательность запросов к базе данных, объединённая в один блок. Модуль транзакций в Spring позволяет управлять такими блоками, повышая безопасность и эффективность работы с СУБД. Работать можно с любыми вариантами транзакций: вложенными, локальными и глобальными. Узнать о возможностях модуля и особенностях его работы можно из документации.

Это лишь самые популярные модули, а в Spring существует ещё несколько десятков других модулей, которые подробно разобраны в документации к фреймворку. И лучше всего знакомиться с ними на практике.

Что такое Spring Boot и как его использовать

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

  • упаковывает зависимости в starter-пакеты;
  • автоматически конфигурирует приложения с помощью jar-зависимостей;
  • создаёт веб-сервер, что позволяет локально запускать на нём приложения.

Как начать использовать Spring

Для работы с фреймворком Spring предстоит пройти несколько шагов:

  • Подготовить IDE и JDK.
  • Создать новый проект на Spring Boot.
  • Подготовить проект в IDE к работе.
  • Запустить код и увидеть результат.

Шаг 1. Подготавливаем IDE и JDK

Для начала работы вам потребуются две вещи:

  • Любая интегрированная среда разработки (IDE). Подойдёт одна из популярных IDE: IntelliJ IDEA, Spring Tools для Eclipse, Visual Studio Code.
  • Средства разработки Java (JDK). Официальный сайт фреймворка Spring рекомендует воспользоваться BellSoft Liberica JDK версии 8 или 11.

Шаг 2. Создаём новый проект на Spring Boot

Самый простой способ подготовить фреймворк для работы — воспользоваться сайтом start.spring.io для создания веб-проекта.

Важно: в пункте Dependencies не забудьте добавить зависимость Web. После этого нажмите кнопку Generate и скачайте ZIP-архив. Распакуйте его в нужную папку на вашем компьютере, и у вас будет готов каркас будущего проекта. Интерфейс сборки — Spring Boot. Версия — последняя стабильная. На 3 июля 2022 года это 2.7.1.

Скриншот: Spring Framework / Skillbox Media

Проекты, созданные на start.spring.io, уже содержат Spring Boot. Это фреймворк, который делает Spring готовым к работе внутри вашего приложения, но не требует написания большого количества кода или сложного конфигурирования. Spring Boot — самый быстрый и популярный способ запуска Spring-проектов.

Шаг 3. Готовим проект в IDE к работе

Некоторые IDE необходимо подготовить к работе, например Visual Studio Code. Для этого внутри приложения необходимо перейти в раздел «Расширения» и найти расширение Spring Boot Extension Pack. После его установки Visual Studio Code будет готова к работе.

Для работы с Visual Studio Code необходимо установить расширение Spring Boot Extension Pack
Скриншот: Visual Studio Code / Skillbox Media

Если вы используете IntelliJ IDEA, то она уже готова к работе с фреймворком Spring. Откройте установленную IDE и создайте новый проект. Назовите его удобным для себя образом. Рассмотрим следующие шаги на примере IntelliJ IDEA.

Выберите в меню пункт File и команду Open. Найдите файл DemoApplication.java в папке src/main/java/com/example/demo

Теперь измените содержимое файла, добавив дополнительный метод hello() и аннотации @SpringBootApplication и @RestController, показанные в приведённом ниже коде. Вы можете просто скопировать и вставить код в текст файла:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class DemoApplication {
                
                  public static void main(String[] args) {
                  SpringApplication.run(DemoApplication.class, args);
                  }
                  
                  @GetMapping("/hello")
                  public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
                  return String.format("Hello %s!", name);
                  }
                
              }

Метод hello(), который мы добавили, принимает параметр name с типом String, а затем объединяет этот параметр со словом «Hello» в коде. Это означает, что если вы зададите в запросе имя «Антон», то ответом будет «Hello Антон». Имя прописывается вручную в параметре defaultValue.

Аннотация @RestController сообщает Spring, что этот код описывает конечную точку, которая должна быть доступна через веб. Аннотация @GetMapping («/hello») указывает Spring, что надо использовать наш метод hello() для ответа на запросы, отправленные на адрес http://localhost:8080/hello. Наконец, @RequestParam указывает Spring, что в запросе должно быть значение name, а если его там нет, то использовать по умолчанию строку «World».

Шаг 4. Запускаем код

Теперь давайте соберём и запустим программу. Так как наша IDE уже готова к работе с фреймворком Spring, а сам проект создан в Spring Boot, который мы скачали с официального сайта, то сделать это просто.

Откройте командную строку (или терминал) и перейдите в папку, где находятся файлы проекта. Мы можем собрать и запустить приложение, выполнив следующую команду:

macOS/Linux:

./mvnw spring-boot: run

Windows:

mvnw spring-boot: run

На выходе получим что-то подобное:

Результат запуска кода в терминале
Скриншот: Spring Framework / Skillbox Media

Последние несколько строк говорят нам о том, что Spring запущен. Встроенный в Spring Boot сервер Apache Tomcat работает в качестве веб-сервера и прослушивает запросы на порту localhost 8080. Откройте браузер и в адресной строке введите http://localhost:8080/hello. Вы должны получить такой ответ:

Работа локального сервера
Скриншот: Spring Framework / Skillbox Media

Поздравляем! Вы сделали свой первый проект на фреймворке Spring. Теперь можно углубиться в документацию фреймворка или пойти на специализированный курс по работе со Spring.

Сколько зарабатывают Spring-программисты

На «Хабр Карьере» доступно более 300 вакансий разработчиков со знанием Spring. Для сравнения, количество вакансий для Java-разработчиков — более 1100, а для Node.js-разработчиков — 180. Кроме фреймворка необходимо знать сам язык Java, работать с разными базами данных, пользоваться Git и таск-трекерами типа Jira.

Зарплата зависит от уровня разработчика. Джуниоры получают от 50 тысяч рублей, а сеньоры — от 200 тысяч. Разработчик среднего уровня может рассчитывать на зарплату от 100 до 250 тысяч рублей.

Скриншот: «Хабр Карьера» / Skillbox Media

Резюме

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

Жизнь можно сделать лучше!
Освойте востребованную профессию, зарабатывайте больше и получайте от работы удовольствие.
Каталог возможностей
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована