Рубріки: Теория

Фреймворк 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

  1. Фреймворк Spring позволяет быстро реализовать новые возможности в рабочей среде благодаря микросервисам, которые можно развивать независимо друг от друга.
  2. Код можно развернуть в любом облаке, а сервисы можно связывать друг с другом и масштабировать на любой платформе.
  3. Spring предоставляет фреймворки для разработки быстрых и безопасных веб-приложений, которые могут подключаться к любому хранилищу данных.
  4. Spring можно использовать для разработки приложений, которые масштабируются по необходимости в зависимости от требований.
  5. Приложения на Spring могут реагировать на бизнес-события и обрабатывать потоковые данные в режиме реального времени.
  6. 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 можно найти в его документации.

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023