Что такое java spring boot
Перейти к содержимому

Что такое java spring boot

  • автор:

Spring

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

Освойте профессию «Java-разработчик»

Чаще всего Spring используется в крупных корпоративных проектах: это характерно для Java и связанных с ним инструментов. Но благодаря универсальности применять Spring можно и в других случаях. Его задача — дать разработчикам больше свободы в проектировании и реализации.

Spring — открытый бесплатный проект, просмотреть его исходный код может любой желающий. Он написан на Java, Kotlin и Groovy, поэтому в теории может использоваться с любым из этих языков. На практике Spring чаще всего применяют с Java. Название читается как «Спринг».

Профессия / 14 месяцев
Java-разработчик

Освойте востребованный язык

Group 1321314345 (4)

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

Spring был разработан компанией Pivotal Software и впервые выпущен в 2002 году.

История создания Spring началась в 2001 году, когда Pivotal стала работать над проектом под названием Sprinkler — это была система управления контентом для веб-сайтов. В то время команда разработчиков состояла из четырех человек: Роя Филдинга, Марка Стеббинса, Дейва Буша и Саймона Кокса.

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

Так и началась разработка Spring. Название Spring было выбрано из-за его простоты и ассоциации с весной — временем обновления и роста.

Первый релиз Spring был выпущен в апреле 2002 года. Он содержал в себе несколько основных компонентов, включая механизм внедрения зависимостей, поддержку аспектов AOP и интеграцию с Hibernate ORM.

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

  • Java-разработчики, которые занимаются созданием десктопных, мобильных или веб-приложений, — Spring можно использовать в любом из направлений. Чаще всего речь идет о проектах enterprise-масштаба.
  • Kotlin-разработчики, так как этот язык написан на основе Java и использовался для создания Spring.
  • Системные архитекторы и инженеры, основная задача которых — проектировать будущие проекты. Spring можно использовать как каркас, шаблон для приложения, поэтому он важен в проектировании и анализе.
  • Иногда — бэкенд-разработчики, так как в некоторых случаях серверная часть сайта может быть написана на Java.

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

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

Принципы Spring

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

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

Поддержка инфраструктуры. На русскоязычном сайте Spring фреймворк сравнивают с водопроводом: основное внимание в нем уделено настройке зависимостей и связей между технологиями. В фреймворке реализован подход IoC, Inversion of Control — инверсия контроля, принцип, который облегчает зависимости между компонентами. Функциональность помогает поддерживать инфраструктуру внутри проекта.

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

Как устроен фреймворк

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

IoC. Выше мы говорили про зависимости и инверсию контроля. Модуль, который управляет ей, считается основным в фреймворке. Это контейнер, которому делегировано управление зависимостями и конфигурирование разных компонентов. Он пользуется технологией, которая называется Dependency lnjection — инъекция зависимостей. При инверсии контроля создание зависимостей выносится за пределы создания самого объекта — вместо этого они создаются в специальном методе или конструкторе в зависимости от выбранного подхода.

Модуль АОП. АОП — аббревиатура аспектно-ориентированного программирования, парадигмы, для которой и нужен модуль. Чаще всего ее используют в Java и похожих языках.

Станьте Java-разработчиком
и создавайте сложные сервисы
на востребованном языке

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

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

Модуль доступа к данным. Эта часть фреймворка отвечает за взаимодействие с СУБД — системами управления базами данных. С помощью модуля Spring можно «связать» логику на Java с управлением базой, настроить доступ к ней разных частей кода. Например, если в приложении выполнится скрипт, которому потребуется информация из базы данных, он сможет к ней обратиться. Задача Spring — в организации грамотного и безопасного доступа.

Для доступа к данным в Spring используется стандарт JDBC, или Java DataBase Connectivity — соединение с базой данных на Java. База соединяется с приложением по уникальному URL с помощью особых сущностей — драйверов.

Кроме этого стандарта, Spring поддерживает ORM — Object-Relational Mapping, или объектно-реляционное отображение. Так называется технология, которая «связывает» реляционные базы данных с сущностями ООП. Spring может работать со всеми основными реализациями ORM.

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

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

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

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

Другие модули и возможности. Как уже говорилось, модулей в Spring несколько десятков. Кроме описанных выше, стоит упомянуть еще несколько:

  • организация удаленного доступа, при котором сущности языка Java передаются через сеть по специальным протоколам и технологиям. Благодаря возможности приложение может вызвать функцию или сервис, которые хранятся на другом сервере, — это важно для больших проектов;
  • модуль удаленного управления — это не то же самое, что удаленный доступ. Удаленное управление помогает настраивать и конфигурировать Java-объекты, даже находящиеся на других серверах;
  • модуль работы с сообщениями помогает организовать отправку, получение и чтение системных сообщений. Сообщения — способ разных Java-приложений «общаться» друг с другом;
  • модуль для тестирования содержит классы и методы для автоматизированного тестирования кода.

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

  • Spring Roo — фреймворк для быстрого создания бизнес-приложений. Он связан со Spring и частично пользуется его возможностями, но задача у него другая, более специфическая. Он реализует подход «соглашение прежде конфигурации», или CoC (Convention over Configuration). Это означает, что фреймворк включает ряд соглашений по структуре проекта, и они превыше конкретных конфигурационных решений. Подход нужен, чтобы быстро создавать типовые приложения и не заботиться о разработке уникальных соглашений;
  • Spring Integration — фреймворк для интеграции разных корпоративных приложений в единую сеть. Он позволяет обмениваться сообщениями, маршрутизировать потоки данных, активировать сервисы, интегрироваться с различными технологиями и строить архитектуру сети. Это бывает нужно, например, на больших предприятиях.

Станьте Java-разработчиком
и создавайте сложные сервисы
на востребованном языке

В чем разница между Spring и Spring Boot

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

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

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

Преимущества Spring

Возможность комплексного использования. Благодаря огромному количеству компонентов и технологий, которые поддерживает Spring, он универсален. Его можно использовать комплексно, например для разных частей архитектуры MVC или решения других сложных задач. Не нужно собирать большой стек технологий. Если чего-то окажется недостаточно, помогут дополнительные инструменты и другое ПО экосистемы Spring.

Облегчение и ускорение работы. Цель любого фреймворка — делать работу эффективнее и быстрее. То, на что ушло бы несколько месяцев на «чистом» языке, с фреймворком делается за считанные дни, а в коммерческой разработке время имеет ключевое значение. Фреймворк — как каркас, вокруг которого пишется остальной код программы. Некоторые компоненты и логика уже реализованы, и задача программиста — в том, чтобы грамотно ими воспользоваться.

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

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

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

Недостатки Spring

Долгая настройка. «Чистый» Spring требует длительной конфигурации с нуля для каждого проекта. Это отнимает время и силы. Для решения проблемы существует Spring Boot. Он упрощает работу с фреймворком, но может стать причиной путаницы из-за схожести названий.

Сложный старт. Java и связанные с ней технологии — не самые простые для старта. Поэтому новичкам может быть сложно начать изучение программирования именно со Spring и дочерних инструментов.

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

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

Java-разработчик

Java уже 20 лет в мировом топе языков программирования. На нем создают сложные финансовые сервисы, стриминги и маркетплейсы. Освойте технологии, которые нужны для backend-разработки, за 14 месяцев.

картинка (67)

Статьи по теме:

Что такое java spring boot

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

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

  • В зависимости от типа создаваемого приложения (Spring MVC, Spring JDBC, Spring ORM и т. д.) импортировать необходимые Spring-модули
  • Импортировать библиотеку web-контейнеров (в случае web-приложений)
  • Импортировать необходимые сторонние библиотеки (например, Hibernate, Jackson), при этом вы должны искать версии, совместимые с указанной версией Spring
  • Конфигурировать компоненты DAO, такие, как: источники данных, управление транзакциями и т. д.
  • Конфигурировать компоненты web-слоя, такие, как: диспетчер ресурсов, view resolver
  • Определить класс, который загрузит все необходимые конфигурации

1. Представляем Spring Boot

Авторы Spring решили предоставить разработчикам некоторые утилиты, которые автоматизируют процедуру настройки и ускоряют процесс создания и развертывания Spring-приложений, под общим названием Spring Boot.

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

2. Особенности Spring Boot

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

2.1. Простота управления зависимостями

Чтобы ускорить процесс управления зависимостями, Spring Boot неявно упаковывает необходимые сторонние зависимости для каждого типа приложения на основе Spring и предоставляет их разработчику посредством так называемых starter-пакетов (spring-boot-starter-web, spring-boot-starter-data-jpa и т. д.).

Starter-пакеты представляют собой набор удобных дескрипторов зависимостей, которые можно включить в свое приложение. Это позволит получить универсальное решение для всех, связанных со Spring технологий, избавляя программиста от лишнего поиска примеров кода и загрузки из них требуемых дескрипторов зависимостей (пример таких дескрипторов и стартовых пакетов будет показан ниже).

Например, если вы хотите начать использовать Spring Data JPA для доступа к базе данных, просто включите в свой проект зависимость spring-boot-starter-data-jpa и все будет готово (вам не придется искать совместимые драйверы баз данных и библиотеки Hibernate).

Если вы хотите создать Spring web-приложение, просто добавьте зависимость spring-boot-starter-web, которая подтянет в проект все библиотеки, необходимые для разработки Spring MVC-приложений, таких как spring-webmvc, jackson-json, validation-api и Tomcat.

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

Следовательно, при использовании Spring Boot, файл pom.xml содержит намного меньше строк, чем при использовании его в Spring-приложениях.

Обратитесь к документации, чтобы ознакомиться со всеми Spring Boot starter-пакетами.

2.2. Автоматическая конфигурация
Второй превосходной возможностью Spring Boot является автоматическая конфигурация приложения.

После выбора подходящего starter-пакета, Spring Boot попытается автоматически настроить Spring-приложение на основе добавленных вами jar-зависимостей.

Например, если вы добавите Spring-boot-starter-web, Spring Boot автоматически сконфигурирует такие зарегистрированные бины, как DispatcherServlet, ResourceHandlers, MessageSource.

Если вы используете spring-boot-starter-jdbc, Spring Boot автоматически регистрирует бины DataSource, EntityManagerFactory, TransactionManager и считывает информацию для подключения к базе данных из файла application.properties.

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

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

2.3. Встроенная поддержка сервера приложений — контейнера сервлетов

Каждое Spring Boot web-приложение включает встроенный web-сервер. Посмотрите на список контейнеров сервлетов, которые поддерживаются «из коробки».

Разработчикам теперь не надо беспокоиться о настройке контейнера сервлетов и развертывании приложения на нем. Теперь приложение может запускаться само, как исполняемый jar-файл с использованием встроенного сервера.

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

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

Введение в Spring Boot

Если вы только приступаете к работе со Spring Boot или «Spring» в целом,начните с ознакомления с этим разделом. Он даст ответы на основные вопросы «что?», «как?» и «зачем?». Раздел содержит введение в Spring Boot вместе с инструкциями по установке. Затем мы проведем вас через создание первого приложения в Spring Boot, описывая по ходу некоторые основные принципы.

Введение в Spring Boot

Spring Boot помогает создавать автономные приложения на базе Spring, которые можно затем выполнять. Мы придерживаемся субъективного взгляда на платформу Spring и сторонние библиотеки, чтобы вы могли начать работу, приложив минимум усилий. Большинство приложений на Spring Boot не нуждаются в детальном конфигурировании Spring.

Вы можете использовать Spring Boot для создания Java-приложений, которые могут быть запущены с помощью команды java -jar или более традиционных методов развертываний через war-файлы. Мы также предоставляем инструментальное средство командной строки, которое запускает «скрипты Spring».

Нашими основными целями является:

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

Разработка вашего первого приложения средствами Spring Boot

В этом разделе описывается разработка небольшого веб-приложения «Hello World!», которое демонстрирует некоторые ключевые возможности Spring Boot. Для сборки этого проекта мы используем Maven, поскольку большинство IDE поддерживают его.

Веб-сайт spring.io содержит множество гайдов по «началу работы», в которых используется Spring Boot. Если вам потребуется решить конкретную проблему, сначала загляните туда.

Вы можете пропустить приведенные ниже шаги, перейдя по адресу start.spring.io и выбрав стартовый паке для веб из поисковика зависимостей. При этом будет создана новая структура проекта, чтобы можно было сразу же приступать к написанию кода.p>

Прежде чем мы приступим, откройте терминал и выполните следующие команды, чтобы удостовериться, что у вас установлены действительные версии Java и Maven:

$ java -version java version "1.8.0_102" Java(TM) SE Runtime Environment (build 1.8.0_102-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
$ mvn -v Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T14:33:14-04:00) Maven home: /usr/local/Cellar/maven/3.3.9/libexec Java version: 1.8.0_102, vendor: Oracle Corporation

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

Создание POM

Начать необходимо с создания файла pom.xml для Maven. pom.xml – это набор правил, который используется для сборки проекта. Откройте ваш любимый текстовый редактор и добавьте следующее:

  4.0.0 com.example myproject 0.0.1-SNAPSHOT org.springframework.boot spring-boot-starter-parent 2.7.5  

Предыдущий листинг должен позволить вам получить рабочий билд. Вы можете проверить его, запустив mvn package (пока что можно игнорировать предупреждение «jar будет пуст – отсутствует содержимое, помеченное для включения!»).

На этом этапе можно импортировать проект в IDE (большинство современных Java IDE предусматривают встроенную поддержку Maven). Для упрощения в этом примере мы продолжаем использовать обычный текстовый редактор.

Добавление зависимостей из classpath

Spring Boot предусматривает ряд «стартовых пакетов», которые позволяют добавлять jar-файлы в classpath. Наши приложения для дымовых (на общую работоспособность) тестов (smoke tests) используют spring-boot-starter-parent в parent секции POM-модели. spring-boot-starter-parent – это специальный стартовый пакет, который предусматривает используемые параметры Maven по умолчанию. Он также предусматривает секцию управления зависимостями , чтобы можно было опускать теги version для «избранных» зависимостей.

Другие «стартовые пакеты» предусматривают зависимости, которые, скорее всего, понадобятся при разработке приложений определенного типа. Поскольку мы разрабатываем веб-приложение, то добавляем зависимость от spring-boot-starter-web . Перед этим можно взглянуть, что у нас имеется на данный момент, выполнив следующую команду:

$ mvn dependency:tree [INFO] com.example:myproject:jar:0.0.1-SNAPSHOT

Команда mvn dependency:tree выводит древовидное представление зависимостей проекта. Как можно заметить, spring-boot-starter-parent сам по себе не предусматривает никаких зависимостей. Чтобы добавить необходимые зависимости, отредактируйте свой pom.xml и добавьте зависимость spring-boot-starter-web сразу под parent секцией:

  org.springframework.boot spring-boot-starter-web  

Если вы снова запустите mvn dependency:tree , то увидите, что теперь существует несколько дополнительных зависимостей, включая веб-сервер Tomcat и сам Spring Boot.

Написание кода

Чтобы завершить приложение, нам необходимо создать один Java-файл. По умолчанию Maven компилирует исходники из каталога src/main/java , поэтому необходимо создать эту структуру каталога, а затем добавить файл с именем src/main/java/MyApplication.java , который будет содержать следующий код:

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @EnableAutoConfiguration public class MyApplication < @RequestMapping("/") String home() < return "Hello World!"; >public static void main(String[] args) < SpringApplication.run(MyApplication.class, args); >> 
import org.springframework.boot.autoconfigure.EnableAutoConfiguration import org.springframework.boot.runApplication import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController @RestController @EnableAutoConfiguration class MyApplication < @RequestMapping("/") fun home() = "Hello World!" >fun main(args: Array) < runApplication(*args) > 

Хотя кода не так уж и много, но происходит очень многое. Рассмотрим важные элементы в следующих нескольких разделах.

Аннотации @RestController и @RequestMapping

Первая аннотация для нашего класса MyApplication – это @RestController . Она известнка как стереотипная аннотация. Данная аннотация служит подсказкой для людей, читающих код, и для Spring, что класс играет определенную роль. В данном случае наш класс является @Controller для веб, поэтому Spring учитывает его при обработке входящих веб-запросов.

Аннотация @RequestMapping передает информацию о «маршрутизации». Она сообщает Spring, что любой HTTP-запрос с путем / следует отображать на метод home . Аннотация @RestController сообщает Spring, что необходимо вывести результирующую строку обратно непосредственно вызывающей программе.

Аннотации @RestController и @RequestMapping являются аннотациями Spring MVC (они не характерны для Spring Boot).

Аннотация @EnableAutoConfiguration

Вторая аннотация на уровне класса – это @EnableAutoConfiguration . Эта аннотация сообщает Spring Boot, что необходимо «угадать», как нужно сконфигурировать Spring, основываясь на добавленных вами jar-зависимостях. Поскольку spring-boot-starter-web добавил Tomcat и Spring MVC, средство автоконфигурирования предполагает, что вы разрабатываете веб-приложение, и настраивает Spring соответствующим образом.

Стартовые пакеты и автоконфигурация

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

Метод «main»

Заключительной частью нашего приложения является метод main . Это стандатный метод, который соответствует стандарту Java для точки входа в приложение. Наш метод main делегирует полномочия классу SpringApplication для Spring Boot, вызывая run . SpringApplication осуществляет начальную загрузку нашего приложения, запуская Spring, который, в свою очередь, запускает автоматически сконфигурированный веб-сервер Tomcat. Нам необходимо передать MyApplication.class в качестве аргумента в метод run , чтобы сообщить SpringApplication , какой компонент Spring является первичным. Массив args также передается для открытия любых аргументов командной строки.

Выполняем пример

На этом этапе приложение уже должно работать. Поскольку вы использовали POM-модель со spring-boot-starter-parent , у вас имеется цель run , которую можно использовать для запуска приложения. Вводим mvn spring-boot:run из корневого каталога проекта, чтобы запустить приложение. Вы должны увидеть вывод, подобный следующему:

$ mvn spring-boot:run . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.5) . . . . . . . . (log output here) . . . . . Started MyApplication in 2.222 seconds (JVM running for 6.514)

Если вы откроете веб-браузер на localhost:8080 , то увидите следующее сообщение:

Hello World!

Чтобы поэтапно выйти из приложения, нажмите ctrl-c .

Создание исполняемого jar-файла

Мы завершаем наш пример созданием полностью самодостаточного исполняемого jar-файла, который можно выполнять в производственном окружении. Исполняемые jar-файлы (иногда называемые «fat (толстыми) jar-файлами») – это архивы, содержащие скомпилированные классы вместе со всеми jar-зависимостями, которые необходимы коду для выполнения.

Исполняемые jar-файлы и Java

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

Чтобы решить эту проблему, многие разработчики используют «uber (убер)» jar-файлы. В uber jar-файл все классы из всех зависимостей приложения упакованы в один архив. Проблема такого подхода заключается в том, что становится трудно понять, какие именно библиотеки находятся в приложении. Также может возникнуть проблема, если одно и то же имя файла используется (но с разным содержимым) в нескольких jar-файлах.

Spring Boot использует другой подход и позволяет вложить jar-файлы напрямую.

Чтобы создать исполняемый jar-файл, необходимо добавить spring-boot-maven-plugin в наш pom.xml . Для этого вставляем следующие строки чуть ниже секции dependencies :

   org.springframework.boot spring-boot-maven-plugin   

POM-модель spring-boot-starter-parent включает конфигурацию для привязки цели repackage . Если вы не используете родительскую POM-модель, то вам необходимо объявить эту конфигурацию самостоятельно.

Сохраняем pom.xml и выполняем mvn package из командной строки следующим образом:

$ mvn package [INFO] Scanning for projects. [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building myproject 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] . .. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject --- [INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar [INFO] [INFO] --- spring-boot-maven-plugin:2.7.5:repackage (default) @ myproject --- [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------

Если вы посмотрите в target каталог, то должны увидеть там myproject-0.0.1-SNAPSHOT.jar . Размер файла должен составлять около 10 МБ. Если вы хотите заглянуть внутрь, то можете использовать jar tvf , как показано ниже:

$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar

В target каталоге также должнен присутствовать гораздо меньший файл с именем myproject-0.0.1-SNAPSHOT.jar.original . Это оригинальный jar-файл, который Maven создал до того, как он был перепакован Spring Boot.

Чтобы запустить это приложение, используйте команду java -jar , как показано ниже:

$ java -jar target/myproject-0.0.1-SNAPSHOT.jar . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.5) . . . . . . . . (log output here) . . . . . Started MyApplication in 2.536 seconds (JVM running for 2.864)

Как и раньше, чтобы выйти из приложения, нажмите ctrl-c .

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

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

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

Антон Яценко

Антон Яценко
Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.

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 основан на другой парадигме: аспектно-ориентированном программировании (АОП).

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

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

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

Транзакция в 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, показанные в приведённом ниже коде. Вы можете просто скопировать и вставить код в текст файла:

Последние несколько строк говорят нам о том, что 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 с помощью специализированных модулей и аспектно-ориентированного программирования. Углубиться в изучение фреймворка лучше с помощью официальной документации.

Читайте также:

  • Типичные ошибки безопасности в разработке ПО — и как с ними справиться
  • Первый раз был с Паскалем: ностальгические истории о коде
  • Василиса Версус: «Девушкам предъявляют слишком высокий ценз эмоциональной стабильности»

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *