Фреймворк 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 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.
Проекты, созданные на start.spring.io, уже содержат Spring Boot. Это фреймворк, который делает Spring готовым к работе внутри вашего приложения, но не требует написания большого количества кода или сложного конфигурирования. Spring Boot — самый быстрый и популярный способ запуска Spring-проектов.
Шаг 3. Готовим проект в IDE к работе
Некоторые IDE необходимо подготовить к работе, например Visual Studio Code. Для этого внутри приложения необходимо перейти в раздел «Расширения» и найти расширение Spring Boot Extension Pack. После его установки Visual Studio Code будет готова к работе.
Если вы используете IntelliJ IDEA, то она уже готова к работе с фреймворком Spring. Откройте установленную IDE и создайте новый проект. Назовите его удобным для себя образом. Рассмотрим следующие шаги на примере IntelliJ IDEA.
Выберите в меню пункт File и команду Open. Найдите файл DemoApplication.java в папке src/main/java/com/example/demo
Теперь измените содержимое файла, добавив дополнительный метод hello() и аннотации @SpringBootApplication и @RestController, показанные в приведённом ниже коде. Вы можете просто скопировать и вставить код в текст файла:
Метод 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 запущен. Встроенный в Spring Boot сервер Apache Tomcat работает в качестве веб-сервера и прослушивает запросы на порту localhost 8080. Откройте браузер и в адресной строке введите http://localhost:8080/hello. Вы должны получить такой ответ:
Поздравляем! Вы сделали свой первый проект на фреймворке Spring. Теперь можно углубиться в документацию фреймворка или пойти на специализированный курс по работе со Spring.
Сколько зарабатывают Spring-программисты
На «Хабр Карьере» доступно более 300 вакансий разработчиков со знанием Spring. Для сравнения, количество вакансий для Java-разработчиков — более 1100, а для Node.js-разработчиков — 180. Кроме фреймворка необходимо знать сам язык Java, работать с разными базами данных, пользоваться Git и таск-трекерами типа Jira.
Зарплата зависит от уровня разработчика. Джуниоры получают от 50 тысяч рублей, а сеньоры — от 200 тысяч. Разработчик среднего уровня может рассчитывать на зарплату от 100 до 250 тысяч рублей.
Резюме
Фреймворк Spring помогает облегчить разработку приложений на Java с помощью специализированных модулей и аспектно-ориентированного программирования. Углубиться в изучение фреймворка лучше с помощью официальной документации.