Перейти к содержимому

Spring boot что это

  • автор:

Spring Boot: быстрое знакомство и старт на примере простого веб-приложения

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

Юрий Авраменко
Senior Software Developer

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

Первоначальная настройка приложения

Переходим на сайт Spring Initializr и подготавливаем минимальный шаблон для нашего будущего приложения:

На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

В левой части оставляем настройки по умолчанию, кроме версии Java (будет достаточно 8), и заполняем Project Metadata.

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

  • Spring Web — модуль, включающий необходимые компоненты для веб-приложения и имеющий встроенный контейнер сервлетов Apache Tomcat.
  • Spring Data JPA — библиотека, используемая для взаимодействия с сущностями базы данных.
  • H2 Database — очень удобная база данных. Располагается в памяти, следовательно, хранит данные только пока запущено приложение. Не используется в продакшене, но для знакомства в этом проекте её будет достаточно.
  • Apache Freemarker — шаблонизатор, будем использовать его для генерации HTML-страниц.

Всё готово, нажимаем GENERATE и получаем архив с исходным кодом проекта. Это минимальный каркас, который импортируем в используемую IDE.

В этом проекте используется IntelliJ IDEA.

Следуем по пути File -> New -> Project from Existing Sources, в диалоговом окне выбираем папку, где находится pom.xml файл проекта. Импортируем проект.

На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

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

На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Если JDK не была установлена ранее, её можно скачать с официального сайта.

Все остальные окна кликаем Next и в последнем — Finish.

Кратко рассмотрим структуру проекта. В первую очередь интересны:

  • файл pom.xml — файл с описанием всех зависимостей, необходимых для приложения;
  • файл application.properties — файл с настройками проекта;
  • каталог java — основной каталог пакетов и классов;
  • каталог resources — каталог для хранения ресурсов (шаблоны, файлы настроек, локализации и т.д.).

Создадим дополнительные пакеты :

  • entity для сущностей, в текущем проекте это будет класс Task;
  • controller для классов контроллера;
  • repository для слоя Repository, интерфейс с описанием общих методов, которые будут использоваться при взаимодействии с базой данных;
  • service для классов с бизнес-логикой.

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

Создадим класс Task в пакете entity

package com.myorganization.Organizer.entity; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import java.util.Date; @Entity public class Task < @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; private Integer priorityId; private String description; private Date date; public Task() < >public Task(Integer id, Integer priorityId, String description, Date date) < this.id = id; this.priorityId = priorityId; this.description = description; this.date = date; >public Integer getId() < return id; >public void setId(Integer id) < this.id = id; >public Integer getPriorityId() < return priorityId; >public void setPriorityId(Integer priorityId) < this.priorityId = priorityId; >public String getDescription() < return description; >public void setDescription(String description) < this.description = description; >public Date getDate() < return date; >public void setDate(Date date) < this.date = date; >> 

Класс помечен аннотацией @Entity. Она указывает на то, что данный класс является сущностью и будет сохраняться в БД.

Данная сущность имеет первичный ключ поле id. Поле помечено аннотацией @Id и аннотацией @GeneratedValue, которая задает стратегию генерации первичного ключа как автоматическую генерацию, в этой сущности – целые числа в порядке возрастания.

Создадим интерфейс TaskRepository в пакете repository

package com.myorganization.Organizer.repository; import com.myorganization.Organizer.entity.Task; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface TaskRepository extends JpaRepository

Класс унаследован от JpaRepository – интерфейса фреймворка Spring Data, предоставляющего набор стандартных методов JPA для работы с БД. Для данного приложения нет необходимости создавать дополнительные методы.

Создадим класс TaskService в пакете service

package com.myorganization.Organizer.service; import com.myorganization.Organizer.entity.Task; import com.myorganization.Organizer.repository.TaskRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import java.util.List; @Service public class TaskService < @Autowired private TaskRepository taskRepository; public ListgetAll() < return taskRepository.findAll(Sort.by(Sort.Order.asc("date"), Sort.Order.desc("priorityId"))); >public Task save(Task task) < return taskRepository.save(task); >public void delete(int id) < taskRepository.deleteById(id); >> 

Класс содержит три метода для работы с задачами:

  • getAll() – метод, возвращающий все задачи, отсортированные в порядке возрастания даты и порядке убывания приоритета.
  • save(Task task) – метод создания новой задачи.
  • delete(int id) – метод, удаляющий задачу по переданному id.

Создадим контроллер TaskController в пакете controller

package com.myorganization.Organizer.controller; import com.myorganization.Organizer.entity.Task; import com.myorganization.Organizer.service.TaskService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import java.util.List; @Controller public class TaskController < @Autowired private TaskService taskService; @GetMapping("/") public String getAll(Model model) < ListtaskList = taskService.getAll(); model.addAttribute("taskList", taskList); model.addAttribute("taskSize", taskList.size()); return "index"; > @RequestMapping("/delete/") public String deleteTask(@PathVariable int id) < taskService.delete(id); return "redirect:/"; >@PostMapping("/add") public String addTask(@ModelAttribute Task task) < taskService.save(task); return "redirect:/"; >> 

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

Замечание. Более правильно было бы добавить еще один интерфейс TaskService, который будет реализовывать существующий класс TaskService (изменим название на TaskServiceImpl), но в рамках этого приложения делать это не будем.

Создадим index.ftlh – шаблон для Freemarker в каталоге resources/templates

    Organizer  

Organizer

Add task to list


Task list(task count : $)

<#list taskList as task>
Id Priority Task description Date Delete from list
$ $ $ $ "">Delete

Стандартный HTML-файл. Единственное отличие – это конструкции вида $ и обозначение списка , вместо которых Freemarker подставит нужные нам значения.

Добавим простой CSS-файл style.css в каталоге resources/static/css:

table < border-collapse: collapse; >table th, table td

На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Запускаем первое приложение на Spring Boot

Переходим к классу OrganizerApplication.class. Он был сформирован автоматически на первом шаге конфигурации каркаса проекта. Его содержимое:

package com.myorganization.Organizer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class OrganizerApplication < public static void main(String[] args) < SpringApplication.run(OrganizerApplication.class, args); >> 

Переходим в меню >Run-> Run ‘OrganizerApplication’ или запускаем через сочетание клавиш Shift+F10. Процесс запуска отобразится в консоли ниже.

Переходим в браузер, набираем в адресной строке адрес localhost:8080 и наблюдаем работающий прототип приложения Organizer.

На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

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

Посмотрите также 10 шпаргалок для веб-разработчика. Там есть видеокурс по Spring Boot.

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

Spring — что это за фреймворк и как он устроен главное изображение

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

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

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

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

Использование Spring Framework

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

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

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

Также Spring помогает писать код в парадигме аспектно-ориентированного программирования, но об этом мы поговорим позже.

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

Разберем популярные модули и компоненты Spring Framework, которые особенно полюбились Java-разработчикам.

IoC — Inversion of Control

Это базовый модуль Spring Framework, который отвечает за управление зависимостями. С его помощью можно объединить модули проекта в единую архитектуру. Ключевая особенность IoC состоит в том, что мы только предоставляем нужные зависимости контейнеру, которые потом автоматически подставляются в нужные места.

Благодаря технологии Dependency lnjection зависимости хранятся не в объектах, а в отдельных контейнерах. Это позволяет с легкостью вносить изменения в проект: взаимодействие между компонентами не будет нарушено.

Аспектно-ориентированное программирование

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

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

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

Доступ к данным

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

Фреймворк работает на основе стандарта Java DataBase Connectivity. Эта технология помогает соединить базу данных через драйвер с использованием уникального URL.

Один из подходов, который используется для упрощения работы с реляционными базами данных в рамках объектно-ориентированного программирования, это ORM. В Spring также есть другие возможности, как например Data Access Object.

Транзакции

Транзакции — это последовательность операций, выраженная через несколько запросов, которые должны быть выполнены атомарно: то есть либо все, либо ни одна. Система собирает несколько запросов в один и отправляет их в базу данных.

У Spring Framework есть инструменты для безопасной работы с транзакциями. Этот модуль гарантирует сохранность данных и поддержку вложенных, локальных и глобальных транзакций.

MVC

Это шаблон для проектирования веб-приложений по системе Model — View — Controller. То есть при создании нового проекта его делят на:

  • Модель — данные, которые использует приложение для своей функциональности.
  • Отображение — пользовательский интерфейс.
  • Контроллер — принципы изменения модели в зависимости от действий пользователя.

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

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

Аутентификация и авторизация

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

  • AuthenticationManager — этот интерфейс позволяет управлять процессом аутентификации, включая проверку учетных данных пользователя и выдачу токена доступа.
  • UserDetailsService — этот интерфейс предоставляет информацию о пользователе: имя, пароль, роль. Spring поддерживает реализацию этого интерфейса через JDBC или Hibernate.
  • UsernamePasswordAuthenticationToken — этот класс представляет собой объект, который содержит имя пользователя и пароль для аутентификации.
  • DaoAuthenticationProvider — этот класс используется для аутентификации пользователя на основе его имени пользователя и пароля. Он использует UserDetailsService для получения информации о пользователе и сравнивает ее с введенными учетными данными.

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

Spring Cloud

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

В этом модуле представлены решения, которые позволяют сбалансировать нагрузку на сервер, проводить маршрутизацию и наладить обмен данными.

Roo

Этот модуль Spring Framework используют для создания бизнес-приложений. На его основе можно создать многофункциональный пользовательский интерфейс.

Roo предлагает разработчикам простой и оптимизированный код без системных библиотек и высокого потребления ресурсов.

Integration

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

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

Batch

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

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

Spring Boot

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

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

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

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

Spring — одна из самых популярных технологий для разработки корпоративных приложений по данным JetBrains.

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

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

На декабрь 2023 года на hh.ru Spring как требуемая технология указана в 2169 вакансиях. Для сравнения — Java указан в 6 429 вакансиях.

«Хабр.Карьера» собрала статистику по заработку программистов в 2023 в зависимости от стека технологий.

Разработчики со знанием Java Spring Framework зарабатывают в зависимости от квалификации:

  • 99 000 рублей — джуны.
  • 189 000 рублей — мидлы.
  • 296 000 рублей — сеньоры.
  • 336 000 рублей — тимлиды.

Средняя зарплата программиста с этим стеком — 218 000 рублей.

Есть отдельная статистика зарплат по Spring Boot. Со знанием этой технологии зарабатывают:

  • 102 000 рублей — джуны.
  • 193 000 рублей — мидлы.
  • 295 000 рублей — сеньоры.
  • 312 000 рублей — тимлиды.

В среднем бэкендеры со знанием Spring Boot зарабатывают 205 000 рублей.

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

Универсальность и оптимизация работы

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

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

Большой выбор инструментов

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

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

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

Бесплатность

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

Недостатки Spring

Сложность

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

Долгая настройка

Запуск и адаптация Spring к конкретному проекту потребует много времени. Частично это можно решить, используя Spring Boot.

Большой объем кода

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

Небольшой экскурс в историю: как появился Spring

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

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

Тогда JavaBeans «усилили» новой технологией Enterprise JavaBeans. Она позволяла улучшить процесс сохранения данных и упростила разработку сложных корпоративных приложений.

Но у Enterprise JavaBeans был серьезный недостаток: она делала код чрезмерно сложным. Так что разработчики продолжили искать новое решение, и оно нашлось в 2003 году.

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

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

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

Принципы Spring

В основе идеологии этого фреймворка лежит три принципа.

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

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

На официальном сайте Spring есть руководство по подключению фреймворка. С его помощью вы сможете написать простейшую программу «Hello, World!» на Spring.

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

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

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

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

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

Введение в 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 .

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

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