Фреймворк Spring и его особенности
Зміст
Что такое фреймворк Spring
Фреймворк Spring упрощает и ускоряет программирование на Java. Это очень популярный Java-фреймворк.
Spring — это фреймворк с открытым исходным кодом. Он написан Родом Джонсоном и выпущен в 2003 году по лицензии Apache 2.0.
Принцип работы
Spring позволяет создавать приложения из обычных объектов Java (plain old Java objects, POJO) и применять к ним корпоративные сервисы. Эта возможность относится к модели программирования Java SE и полностью или частично — к Java EE.
Приложения Java обычно состоят из объектов, которые работают совместно. Таким образом объекты приложения находятся в зависимости друг от друга.
Инверсия управления (Inversion of Control, IoC) предоставляет стандартизированные способы компоновки отдельных объектов в полностью готовое к работе приложение. Шаблоны проектирования представлены в этом фреймворке как объекты первого класса, которые можно интегрировать в собственное приложение.
Еще одна концепция, лежащая в основе Spring Framework — аспектно-ориентированное программирование (Aspect Oriented Programming, AOP).
В большинстве корпоративных приложений реализованы общие понятия, касающиеся различных типов объектов и модулей. Это, например, ведение журналов, управление транзакциями, проверка данных и т. п.
В объектно-ориентированном программировании модульность приложения достигается за счет классов, а в аспектно-ориентированном — за счет аспектов.
Spring AOP устраняет зависимости общих задач от классов, чего невозможно достичь при использовании обычной модели объектно-ориентированного программирования.
Например, может существовать отдельный класс для ведения журналов, а функциональные классы должны будут вызывать эти методы для заполнения журналов.
Ниже описаны основные концепции AOP.
Aspect | Аспект — это класс, реализующий понятия, общие для множества классов, например, управление транзакциями. Аспекты могут быть обычными классами, настраиваемыми с использованием XML-конфигурации Spring. Также можно воспользоваться интеграцией Spring AspectJ, чтобы определить класс как аспект с помощью аннотации @Aspect. |
Join point | Точка соединения — это определенная точка в приложении. В Spring AOP точка соединения всегда означает выполнение метода. |
Advice | Рекомендации — это методы, выполняемые по достижении определенной точки соединения с совпадающим набором точек соединения. |
Pointcut | Набор точек соединения — выражение, сопоставленное с точками соединения, и определяющее, следует ли выполнять рекомендацию. Для этих выражений в Spring используется язык выражений AspectJ. |
Target Object | Это целевые объекты, к которым применяются рекомендации. Spring AOP реализуется с использованием прокси времени выполнения, потому такой объект всегда доступен через прокси. Это значит, что подкласс создается во время выполнения, целевой метод переопределяется и в него включается рекомендация в зависимости от конфигурации. |
Прокси AOP | Реализация AOP в Spring использует динамический прокси JDK для создания прокси-классов для целевых классов и вызова рекомендаций. Такие классы называются прокси-классами AOP. |
Weaving | Это процесс связывания аспектов с другими объектами для создания прокси-объектов с рекомендациями. Это может делаться во время компиляции, загрузки или выполнения. Spring AOP выполняет связывание во время выполнения. |
Для каких задач используется фреймворк Spring
- Фреймворк Spring позволяет быстро реализовать новые возможности в рабочей среде благодаря микросервисам, которые можно развивать независимо друг от друга.
- Код можно развернуть в любом облаке, а сервисы можно связывать друг с другом и масштабировать на любой платформе.
- Spring предоставляет фреймворки для разработки быстрых и безопасных веб-приложений, которые могут подключаться к любому хранилищу данных.
- Spring можно использовать для разработки приложений, которые масштабируются по необходимости в зависимости от требований.
- Приложения на Spring могут реагировать на бизнес-события и обрабатывать потоковые данные в режиме реального времени.
- Spring можно использовать для автоматизации задач и офлайн-обработки данных в удобное для вас время.
Преимущества и недостатки Spring
Плюсы Spring
- Гибкость. Фреймворк предоставляет гибкие библиотеки в помощь разработчикам. Пользователи могут выбрать аннотации для конфигурации на базе XML и Java. IoC и DI также способствуют расширению функциональности и возможностей.
- Портативность. Это портативный фреймворк, потому что клиентскую сторону можно использовать в бизнес-логике приложения Swing
Библиотека для создания графического интерфейса для программ на языке Java, а серверную — в веб-приложении или в приложении EJB. Spring не занимает много места на диске. Объем базовой версии составляет всего 2 МБ.
- Скорость. Фреймворк обеспечивает быстрый запуск и завершение работы. Благодаря этому повышается производительность.
- Простота тестирования. Во фреймворке Spring разработчики могут с легкостью проводить тестирование. Его простота обеспечивается использованием внедрения зависимостей.
- AOP. Аспектно-ориентированное программирование позволяет расширить модульность приложений. Вместо того, чтобы изменять существующий код, мы можем создать новый код и новое поведение отдельно.
Минусы Spring
- Сложность. Работать со Spring довольно сложно. Для использования этого фреймворка разработчикам необходимы соответствующие навыки и опыт.
- Крутая кривая вхождения. Если у вас нет опыта разработки, то выучить Spring вам будет тяжело. Это обусловлено использованием новейших технологий программирования в этом фреймворке.
- Использование XML. При разработке приложения Spring требуется создавать много XML-кода. Это тоже может быть проблематично для разработчиков.
- Параллельные механизмы. Множество применений, обеспечиваемых фреймворком, могут быть на руку опытным разработчикам, а неопытных они могут приводить в замешательство. Могут возникнуть проблемы с выбором правильных механизмов и принятием правильных решений. Это замедляет разработку приложений.
- Безопасность. Такие угрозы, как межсайтовые сценарии, очень распространены. Проблема — в документации Spring. В ней недостаточно рекомендаций по устранению и предотвращению этих угроз. Поэтому хакеры могут легко внедрить свой код в приложения.
Различия между Spring и Spring Boot
Spring Framework — это платформа для разработки, состоящая из множества мини-платформ, библиотек и расширений. Одно из ее расширений — Spring Boot. Spring Boot упрощает и ускоряет работу со Spring.
Расширение Spring Boot упрощает процесс настройки приложения за счет предварительно настроенных компонентов. Оно больше подходит для создания микросервисов и облачных приложений благодаря своей облегченной архитектуре и быстрому запуску.
С помощью Spring Boot можно с легкостью создавать автономные приложения производственного уровня на основе Spring, которые можно «просто запустить». Благодаря мощным функциям и простоте использования этого расширения многие разработчики выбирают его для создания веб- или мобильных приложений.
Если вам не требуется особо уникальная конфигурация, то для создания проекта можно использовать Spring Boot. Для добавления зависимостей вы можете воспользоваться системой аннотаций Spring Framework. При этом у вас останется доступ ко всем возможностям Spring Framework.
Пример использования фреймворка Spring
В этой статье мы рассмотрим процесс создания и запуска простейшего приложения на Spring.
Шаг 1. Подготавливаем IDE и JDK
Spring поддерживается многими средами разработки (IDE). Чаще всего используются IntelliJ IDEA, Spring Tools для различных IDE, Visual Studio Code, Eclipse и многие другие. Подробные инструкции по загрузке, установке и настройке вы найдете на сайтах IDE.
Что касается Java™ Development Kit (JDK), для разработки на Spring рекомендуется использовать BellSoft Liberica JDK версии 17. Скачайте и установите дистрибутив для своей операционной системы.
Шаг 2. Создаем новый проект на Spring Boot
Откройте сайт start.spring.io, чтобы создать веб-проект:
- в разделе Project выберите Maven;
- в разделе Language выберите Java;
- в разделе Spring Boot выберите текущую версию, но не моментальный снимок (не snapshot);
- в поле Add dependencies введите Web, затем выберите Spring Web;
- нажмите кнопку GENERATE, чтобы создать и загрузить архив с проектом.
Шаг 3. Редактируем файл приложения
Работа с IDE
Если вы пользуетесь IDE с поддержкой Spring, то создать каркас проекта можно в IDE.
Предварительные требования
Для разработки приложения Spring Boot в Visual Studio Code потребуется установить следующее:
- Java Development Kit (JDK) (если он еще не установлен)
- Extension Pack for Java
- Spring Boot Extension Pack
Создание проекта
Расширение Spring Initializr позволяет находить зависимости и генерировать новые проекты Spring Boot.
После установки Spring Boot Extension Pack откройте палитру команд (Command Palette, Ctrl+Shift+P), введите Spring Initializr, чтобы начать генерировать проект Maven или Gradle, и выполните инструкции мастера.
Hello
В этой статье мы воспользуемся примером с официального сайта.
Откройте файл DemoApplication.java
, расположенный в каталоге src/main/java/com/example/demo
.
Добавьте в него аннотации и метод, как указано ниже:
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @GetMapping("/hello") public String hello(@RequestParam(value = "name", defaultValue = "World") String name) { return String.format("Hello %s!", name); } }
Метод hello()
принимает строковой аргумент name
, а затем комбинирует его со словом Hello
в коде. Если в запросе будет указано имя Nika
, то ответ будет таким: Hello Nika
.
Аннотация @RestController
указывает Spring, что этот код описывает конечную точку, которая будет доступна в сети. @GetMapping(“/hello”)
указывает, что для ответа на запросы, отправляемые по адресу http://localhost:8080/hello
, нужно вызывать метод hello()
.
Аннотация @RequestParam
указывает Spring, что в запросе может быть указано значение параметра name
, но если оно не указано, то вместо него по умолчанию будет использоваться слово World
.
Шаг 4. Запускаем код
Откройте папку проекта (например, demo) и запустите команду:
Linux:
./mvnw spring-boot:run
Windows:
mvnw.cmd spring-boot:run
Результат:
Последние две строки говорят о том, что Spring запущен. Встроенный в Spring Boot сервер Apache Tomcat работает как веб-сервер и перехватывает запросы, отправляемые на порт 8080 локального хоста.
Откройте веб-браузер и в адресной строке введите http://localhost:8080/hello
.
Вы увидите такой ответ:
Если же в адресе мы укажем параметр name
и его значение (добавим ?name=Nika
в конце адреса), то получим такой ответ:
Заключение
- Мы рассмотрели фреймворк Spring Framework. Он упрощает и ускоряет разработку приложений на Java и состоит из множества мини-сервисов, библиотек и расширений.
- Расширение Spring Boot еще больше ускоряет и упрощает разработку приложений, хотя теоретически дает меньше гибкости за счет автоматических настроек.
- С помощью инициализатора на start.spring.io можно быстро создать заготовку приложения.
- Spring Framework поддерживается многими IDE. В некоторых для работы с ним нужно устанавливать расширения, а среда разработки IntelliJ IDEA заранее настроена для создания проектов на Spring.
- Подробную информацию о фреймворке Spring можно найти в его документации.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: