Хотя Spring Framework часто считают устаревшим, он по-прежнему является популярным инструментом разработки приложений, используемым организациями по всему миру. Spring предлагает непревзойденный контроль, первоклассную безопасность и экономящие время зависимости с помощью Spring Beans.
Spring Framework
Предоставлено Национальной библиотекой им. Национальная библиотека им. Н. Э. Баумана Последнее изменение этой страницы: 20:42, 14 марта 2020 г.
Разработчики: | Pivotal Software |
---|---|
Выпущено: | 1 октября 2002 года, 20 лет назад ( 2002-10-01 ). |
Постоянное освобождение: | 5.1.2 Источник 1 / 13 февраля 2019 ; 3 года назад ( 2019-02-13 ) |
Опубликовано в: | Java |
Платформа: | Java EE |
Тип программного обеспечения: | Структура приложения |
Лицензия: | Лицензия Apache 2.0 |
Сайт | Spring .io |
Spring Framework — один из самых популярных фреймворков для создания веб-приложений на Java. Хотя Spring не предоставляет конкретной модели программирования, она широко используется в сообществе Java, прежде всего, как альтернатива и замена модели Enterprise JavaBeans. Spring предлагает большую свободу проектирования для Java-разработчиков, поскольку Spring предоставляет множество функций, недоступных в стандартах Java EE, таких как Spring Batch или Spring Integration; он также предоставляет хорошо документированное, простое в использовании решение проблем, возникающих при создании корпоративных приложений. Источник 2
Основные возможности Spring применимы к любому Java-приложению, а для создания веб-приложений на платформе Java Enterprise существует множество расширений и усовершенствований. По этим причинам Spring завоевал популярность и признан разработчиками как стратегически важный фреймворк.
Содержание
- 1 Структура
- 2 Компоненты Spring Framework
- 3 DI/IoC
- 4 Spring MVC
- 5 Spring Security
- 6 Spring Boot
- 7 Преимущества Spring Framework
- 8 Аспектно-ориентированное программирование (Aspect Oriented Programming — AOP)
- 9 Aspect, Advice, Pointcut, JointPoint и Advice Arguments в АОП
- 10 Spring Bean
- 11 Scope у Spring Bean
- 12 Жизненный цикл Spring Bean
- 13 Источники
Spring не является конкретным фреймворком. Это общее название для ряда небольших фреймворков, каждый из которых выполняет свои задачи.
Spring имеет модульную структуру. Это позволяет нам подключать только те модули, которые необходимы для нашего приложения, а не те, которые мы намеренно решили не использовать. Такой подход помог Spring обойти своего конкурента (EJB) и занять лидирующие позиции. Spring 3 Эта структура показана на рисунке 1.
Spring состоит из нескольких модулей:
Модуль Data Access содержит инструменты для работы с данными (в основном с базами данных), модуль Web — для работы в Интернете (включая создание веб-приложений).
Кроме того, существует вся инфраструктура Spring: множество других проектов, которые формально не являются частью самого фреймворка, но могут быть легко интегрированы в ваш проект Spring (например, Spring Security для обработки авторизации пользователей на сайте).
Компоненты Spring Framework
Spring — это огромный фреймворк, поскольку его создатели охватили практически все области Java-приложений. Поэтому во фреймворке Spring имеется большое количество строительных блоков (схема этого фреймворка par
- IoC (Inversion of Control) контейнер;
- AOP-фреймворк (включая интеграцию с AspectJ);
- Data Access фреймворк;
- Transaction management;
- MVC-фреймворк;
- Remote Access фреймворк;
- Batch processing;
- Фреймворк аутентификации и авторизации;
- Remote Management;
- Messaging-фреймворк;
- Testing-фреймворк.
Кто пользуется Spring
- Java-разработчики, которые занимаются созданием десктопных, мобильных или веб-приложений, — Spring можно использовать в любом из направлений. Чаще всего речь идет о проектах enterprise-масштаба.
- Kotlin-разработчики, так как этот язык написан на основе Java и использовался для создания Spring.
- Системные архитекторы и инженеры, основная задача которых — проектировать будущие проекты. Spring можно использовать как каркас, шаблон для приложения, поэтому он важен в проектировании и анализе.
- Иногда — бэкенд-разработчики, так как в некоторых случаях серверная часть сайта может быть написана на Java.
- Для более быстрого и легкого создания приложений — набор инструментов фреймворка позволяет выполнять те же задачи с меньшим количеством затрат, чем при написании с нуля.
- Для архитектурной «гибкости»: Spring универсален, поэтому позволяет реализовать нестандартные решения.
- Для гибкого использования возможностей — к проекту можно подключать разнообразные модули и тем самым настраивать инструментарий под свои нужды.
- Для удобного построения зависимостей, благодаря которому разработчики могут сконцентрироваться на логике приложения, а не на том, как подключить одно к другому.
- Для реализации парадигмы аспектно-ориентированного программирования, о котором мы подробнее расскажем ниже.
- Для решения задач, связанных со связями между компонентами или разными приложениями, для доступа различных частей системы друг к другу и многого другого.
Принципы Spring
Инфраструктурная поддержка. На русскоязычном сайте Spring фреймворк сравнивается с водопроводной системой: основное внимание уделяется настройке зависимостей и связей между технологиями. Фреймворк реализует подход IoC (Inversion of Control), принцип, облегчающий зависимость между компонентами. Функциональность помогает поддерживать инфраструктуру в рамках проекта.
Перед началом работы над проектом необходимо его сконфигурировать, то есть определить, какие модули фреймворка будут к нему подключены и какие технологии будут использоваться. В зависимости от конфигурации разработчику доступны определенные инструменты.
Spring является модульным, что означает, что он состоит из множества компонентов, мини-фреймворков. Компоненты (модули) иногда называют каркасом в каркасе. Опишем самые важные — те, которые добавляют функциональность фреймворку.
IoC. Выше мы говорили о зависимостях и инверсии управления. Модуль, управляющий им, считается главным модулем фреймворка. Это контейнер, который заботится об управлении зависимостями и регулировании различных компонентов. Инверсия контроля переносит создание зависимости за пределы создания самого объекта — вместо этого она создается в определенном методе или конструкторе, в зависимости от выбранного подхода.
Как устроен фреймворк
Модуль AOS: AOS — это сокращение от аспектно-ориентированного программирования, парадигмы, которая требует модуля. Чаще всего он используется в Java и подобных языках.
Java — это язык с сильным акцентом на объектно-ориентированное программирование. Но возможностей ООП не всегда достаточно — есть задачи, для которых такой подход не является оптимальным. Они включают в себя сквозную функциональность, которая не может быть изолирована на отдельные единицы с помощью ООП. В результате реализация разбрасывается по множеству объектно-ориентированных блоков, а код становится более сложным и запутанным.
AOP необходим для обеспечения поддержки сквозной функциональности. Используя этот пример, его можно описать отдельно и выделить как самостоятельную сущность. Однако используемые методы находятся за пределами ООП и поэтому требуют собственной реализации. В Spring за эту реализацию отвечает соответствующий модуль.
Модуль доступа к данным. Эта часть фреймворка отвечает за взаимодействие с СУБД (системами управления базами данных). С помощью модуля Spring можно «связать» логику на Java с управлением базой данных, чтобы настроить доступ к ней для разных частей кода. Например, когда приложение выполняет сценарий, которому нужна информация из базы данных, оно может получить к ней доступ. Цель Spring — обеспечить интеллектуальный и безопасный доступ.
Spring использует JDBC или Java DataBase Connectivity, соединение с базой данных Java, для доступа к данным. База данных подключается к приложению через уникальный URL-адрес с помощью специальных драйверов сущностей.
В дополнение к этому стандарту Spring поддерживает ORM — Object-Relational Mapping или объектно-реляционное отображение. Так называется технология, которая «соединяет» реляционные базы данных с сущностями ООП. Spring может работать со всеми основными реализациями ORM.
Модуль транзакций. Транзакция — это последовательность запросов к базе данных, объединенных в один блок. Spring позволяет вам управлять и координировать транзакции, чтобы ваша работа была прозрачной и безопасной. Возможности фреймворка включают в себя способность обрабатывать локальные, глобальные и вложенные транзакции, использовать для них точки памяти и многое другое. Она также поддерживает абстракции — они требуются для определенных форм данных в базе данных.
Модуль MVC. MVC — это популярная структура приложений, в которой приложение делится на три основные части: модель данных, представление и контроллер. Модель представляет собой данные, с которыми работает приложение, дисплей отвечает за интерфейс и связь с пользователем, а контроллер — это логика изменения модели в ответ на ввод данных пользователем. Схема чаще всего используется для веб-приложений.
Часто при определении Spring говорят, что это IoC-контейнер. Хотя это одна из основных особенностей Spring, такое определение почти ничего не объясняет о Spring. Давайте подробно разберемся, что такое IoC и зачем он нужен. Предлагаю разобраться в этом сначала на примере приложения без Spring.
Инверсия управления (Inversion of Control, IoC) — один из популярных принципов объектно-ориентированного программирования (ООП), который повышает модульность и масштабируемость программы за счет уменьшения зависимостей между ее компонентами.
IoC и DI
Но что означает зависимость в программировании? Если класс А использует класс В, то это зависит от него. Автомобиль зависит от двигателя, компьютер — от процессора. В ООП зависимость означает класс, без которого код другого класса не может функционировать.
Выразим в коде пример зависимости автомобиля и двигателя, о которой говорилось ранее. Первая версия этого кода написана без инверсии управления:
Код без инверсии управления
Как это выглядит в коде
Здесь мы видим, что у нас есть класс Engine, у которого есть метод, который выполняется (предположим, что он запускает Engine). Чтобы выполнить метод Drive, нам сначала нужно инициализировать экземпляр зависимого класса Engine (чтобы проверить, что с нашим Engine все в порядке).
Основные недостатки этого подхода:
Этот код можно легко улучшить, добавив интерфейс:
Это уменьшает связность, и мы можем заменять новые реализации (V8Engine) без изменения кода в методе drive. Но мы должны быть осторожны в выборе способа применения. И это делает ситуацию довольно сложной: Если существует слишком много реализаций, их легко перепутать.
- сильная связанность между классами (невозможно разрабатывать класс Car, не делая изменений в классе Engine и наоборот);
- такое приложение тяжело изменять, а значит его сложно расширять (поддерживать и обновлять) .
О чем говорит обратный контроль? Возьмите на себя создание зависимостей
Что изменилось в кодексе? Был написан специальный метод setEngine, которому мы передали наш двигатель. Теперь нам не нужно создавать каждый новый объект класса Engine вручную, а можно передать его нашему классу извне с помощью метода setEngine (как он будет создан — это не задача нашего класса).
Зависимости также можно реализовать с помощью Construction Injection, передавая аргументы через конструктор:
Пример без Spring Framework, но с инверсией управления Constructor Injection.
Как вы можете видеть, перевернув элементы управления, мы смогли уменьшить количество зависимостей, что облегчает изменение и расширение класса.
Но у нас все еще есть проблема: новые классы по-прежнему нужно создавать с помощью оператора new (хотя теперь это делается вне исходного кода):
Каждый ресурс (класс) в Spring называется bean. Это название является аналогией JavaBeans — классов в Java, которые написаны по определенным правилам (наличие конструктора без параметров, getter/setter). Бины в Spring не связаны такими строгими правилами, но очень похожи на свои аналоги в Java.
Чтобы добавить Spring в свое приложение, вам нужно сделать следующее:
Помните, что выбор конфигурации изменяет реализацию интерфейса. Ниже приведены примеры возможных конфигураций в Spring.
Уровень доступа к данным и интеграции состоит из модулей JDBC, ORM, JDBC, OXM, JMS и Transaction.
Web: Этот модуль использует прослушиватели сервлетов и веб-ориентированную структуру приложений. Он также обеспечивает веб-ориентированную интеграцию и функции многосегментной загрузки файлов.
Добавляем Spring Framework в приложение
Web Servlet: Этот модуль содержит реализацию на основе MVC для веб-приложений.
Web Socket: Этот модуль обеспечивает связь на основе WebSocket и двустороннюю связь между клиентом и сервером в веб-приложениях.
- создать Spring-конфигурацию;
- задать контекст Spring — под контекстом в этом случае стоит понимать интерфейс ApplicationContext. Он содержит информацию о бинах и их зависимостях, а также общие данные о конфигурации приложения;
- получить бины из IoC-контейнера.
Web Portlet: Этот модуль также называется Spring MVC Portlet Module. Он предоставляет портлеты на основе Spring и копирует все функциональные возможности модуля Web Servlet.
Доступ к данным и интеграция:
AOP: Язык AOP — это полезный инструмент, который позволяет разработчикам добавлять бизнес-функциональность в приложение.
- ORM: модуль ORM обеспечивает согласованность / переносимость кода независимо от технологий доступа к данным. Он будет основан на концепции объектно-ориентированного отображения.
- Модуль JDBC состоит из уровня абстракции JDBC. Это помогает вам понять необходимость выполнения кодирования, связанного с JDBC.
- OXM: Object XML Mappers (OCM) помогает конвертировать объекты в формат XML и наоборот.
- Модуль Java Messaging Service предлагает такие функции, как создание и потребление сообщений.
- Транзакция: Этот модуль предлагает декларативный и программный метод управления для реализации уникальных интерфейсов и для всех типов POJO (Plain Old Java Object)
Web
Toolbox: Этот модуль предоставляет набор инструментов для реализации классов и загрузчиков. Он используется для конкретных серверов приложений.
Тестирование: Этот модуль поддерживает тестирование компонентов Spring с помощью инструментов TestNG или JUnit. Он обеспечивает последовательную загрузку Spring ApplicationContexts и кэширование этих фреймворков.
Фреймворк Spring Web MVC обеспечивает архитектуру «модель — представление — проверка» и предоставляет компоненты, которые помогают вам быть гибкими и свободно связанными с веб-приложениями.
Модель MVC позволяет разделить различные аспекты приложения, предоставляя свободно связанные компоненты. Spring MVC также позволяет создавать гибкие и слабосвязанные веб-приложения.
Дизайн MVC также позволяет разделить бизнес-логику, логику представления и логику навигации. Он также обеспечивает элегантное решение для использования
Spring часто называют «фреймворком», поскольку он поддерживает другие интегрированные фреймворки в экосистеме Java, такие как Struts, Hibernate и Tapestry. Spring поставляется во многих вариантах, предназначенных для конкретных целей, таких как Spring MVC, Spring Boot или Spring Security.
Spring известен своей реализацией зависимостей и системами инверсии контроля (Inversion of Control, IoC), которые позволяют легко создавать большие приложения с неплотной связью. Spring особенно хорошо подходит для финансовых и бизнес-приложений, поскольку он быстрый, безопасный и позволяет легко создавать транзакционные системы. Среди основных работодателей разработчиков Spring — Citibank, eBay, Visa и JP Morgan.
Spring – MVC Framework
Фреймворк Spring позволяет создавать безопасные бизнес-приложения, которые автоматически обрабатывают низкоуровневые операции, такие как обслуживание жизненного цикла контейнера и управление зависимостями.
Многие из этих недостатков были устранены с изобретением модуля Spring Boot, который является очень самодостаточным и предназначен для архитектур микросервисов.
Большинство современных приложений Spring основаны на Boot, но существует также множество унаследованных приложений, которые до сих пор поддерживаются компаниями с большой историей.
Что такое Spring Framework?
Давайте разберем основные компоненты приложения Spring framework, чтобы помочь вам понять общую картину.
Spring Beans — это экземпляры классов, управляемых Spring. Они являются самым важным компонентом Spring.
Традиционно объекты создают частные экземпляры своих зависимостей. Spring управляет всеми зависимостями объекта и создает экземпляр объекта в компоненте bean, когда все необходимые зависимости реализованы. Аннотация @ComponentAnnotation является наиболее распространенным методом определения экземпляров bean.
@ Компонент
Преимущества Spring
- Обычный старый объект Java (POJO) : приложения Spring просто используют обычные объекты Java, а не серверы или корпоративные контейнеры. Это делает приложения более легкими.
- Модульность IoC и MVC позволяют повторно использовать компоненты в вашем приложении без ручного управления зависимостями каждого из них.
- Сильная поддержка экосистемы Java : Spring новаторски использует уже существующие технологии, такие как ORM-фреймворки, JEE и таймеры JDK.
- Масштабируемые транзакции : Spring предлагает последовательный, масштабируемый интерфейс управления транзакциями как для локальных, так и для глобальных транзакций.
- Это включает протоколы кеширования.
- Безопасность : Простота внедрения модулей безопасности с функциями аутентификации и проверки.
- Гибкие конфигурации : можно использовать аннотации на основе Java или конфигурацию XML.
Недостатки Spring
- Сложность : Spring Framework предпочитает повышенный контроль и сложность простоте использования. Поэтому Spring сложнее подобрать, чем другие веб-фреймворки. Несмотря на то, что Spring очень мощный, он лучше всего подходит для опытных разработчиков, которые могут справиться с его крутой кривой обучения.
- Параллельные механизмы : широкий спектр возможностей Spring означает, что одну задачу можно выполнить несколькими способами. Вам потребуется доскональное знание доступных инструментов, чтобы выбрать идеальное решение и избежать путаницы между командами.
- Отсутствие надежной документации : в документации Spring отсутствуют четкие рекомендации по ряду тем, особенно по методам кибербезопасности. Пользователи должны бороться с распространенными атаками, такими как межсайтовый подлог и атаки с использованием сценариев.
публичный
Категория
Особенности Spring
- Инверсия управления (IoC) : перекладывает ответственность за зависимости с объектов на сам фреймворк. Без IoC каждый объект должен обрабатывать свой собственный экземпляр зависимости. В IoC объект просто указывает, что ему нужна определенная зависимость, и платформа настраивает и управляет ею автоматически. Это упрощает процесс разработки приложения за счет консолидации системы зависимостей и снижения нагрузки на отдельные классы.
- Аспектно-ориентированное программирование : Spring AOP позволяет иметь разные загрузчики классов для повышения модульности и разделения сквозных проблем.
- Внедрение зависимостей : процесс, который Spring использует для автоматического управления зависимостями bean-компонентов. Spring проверяет, какие bean-компоненты необходимы для работы конкретного bean-компонента, и внедряет их в качестве зависимости. Spring может выполнять внедрение зависимостей с помощью конструктора или метода установки.
- Управление жизненным циклом контейнера : автоматическое создание, управление и настройка объектов приложения.
- Поддержка MVC : поддерживает веб-архитектуру MVC, которая разделяет функциональные возможности между уровнями модели, представления и контроллера.
- Обработка ошибок : включает обработку исключений JDBC с системой иерархии исключений.
Архитектура и компоненты Spring
Транспортное средство
Beans
Компоненты Bean имеют определенный жизненный цикл и видимость в зависимости от области применения. Существует шесть типов полей приложений: singleton, prototype, request, session, application и websocket. Поля Singleton и Prototype можно использовать в любом приложении, а последние четыре доступны только для веб-приложения.
Область видимости компонента bean по умолчанию — это singleton, где создается и хранится в памяти только один экземпляр компонента bean. Многократные запросы к компоненту возвращают общую ссылку на один и тот же компонент. В отличие от этого, прототипная область видимости приводит к созданию нового компонента bean каждый раз, когда в приложении выполняется запрос на компонент bean.
Метод Spring для включения боба в одно и другое. Spring обнаруживает зависимость выбранного компонента bean, ищет соответствие и затем завершает зависимость. Функция @AutowiredAnnotations сообщает SpringС IoC разработчику нужно только сообщить о зависимости, а Spring сделает все остальное. IoC-контейнер создает экземпляры двух классов и реализует движок как зависимость.Модули - это группы инструментов, сгруппированных по назначению. Разработчики могут указать, какие модули они хотят внедрить помимо базового набора в качестве зависимостей для каждого конкретного приложения.Модули организованы в группы, называемые проектами. Каждый проект содержит модули, разработанные для конкретной платформы или типа приложения. Системы проектов и модулей помогают сделать вашу программу компактной, поскольку вы можете загружать только те инструменты, которые используются в приложении.>
Теперь мы представляем ваше первое приложение Spring: простую систему рекомендаций фильмов. Создание нового проекта с использованием Spring framework является сложной задачей, поскольку вам придется вручную настраивать всю архитектуру, включая то, какие зависимости Apache Maven использовать, решать, что использовать — XML или Java, а также устанавливать веб-сервер, например Tomcat.
Вместо этого мы будем использовать проект Spring Boot, чтобы автоматизировать большую часть процесса установки и использовать встроенный веб-сервер.
Autowiring
Мы будем использовать Spring Initializr для быстрого создания проекта Spring Boot с его простым выпадающим меню. Сначала зайдите на start.spring.io. Вы найдете похожий интерфейс меню, как показано ниже, с настройками и полями метаданных на выбор.
Для этого проекта выберем «Maven Project», в качестве языка выберем Java и последнюю версию Spring Boot. Пока избегайте версий «SNAPSHOT», поскольку они все еще находятся на стадии альфа- или бета-тестирования. В разделе «Метаданные проекта» введите io.datajek.springbasics «GroupID» и movie-recommender-system «ArtifactID». GroupID и artifactID — это, по сути, имя пакета и имя класса. Обычно в поле «Dependencies» добавляются зависимости от модулей, но в данном проекте по умолчанию требуется только Spring.
Метод Spring для включения боба в одно и другое. Spring обнаруживает зависимость выбранного компонента bean, ищет соответствие и затем завершает зависимость. Функция @AutowiredAnnotations сообщает SpringМодули - это группы инструментов, сгруппированных по назначению. Разработчики могут указать, какие модули они хотят внедрить помимо базового набора в качестве зависимостей для каждого конкретного приложения.___()'_ __ _ _(_)_ __ __ _ \ \ \( ( )\___ | ''_| | ';//.>Метод Spring для включения боба в одно и другое. Spring обнаруживает зависимость выбранного компонента bean, ищет соответствие и затем завершает зависимость. Функция @AutowiredAnnotations сообщает SpringМодули - это группы инструментов, сгруппированных по назначению. Разработчики могут указать, какие модули они хотят внедрить помимо базового набора в качестве зависимостей для каждого конкретного приложения.=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v2.3.4.RELEASE)2021-05-03 22:46:15.549 INFO 78 --- m>Метод Spring для включения боба в одно и другое. Spring обнаруживает зависимость выбранного компонента bean, ищет соответствие и затем завершает зависимость. Функция @AutowiredAnnotations сообщает SpringМодули - это группы инструментов, сгруппированных по назначению. Разработчики могут указать, какие модули они хотят внедрить помимо базового набора в качестве зависимостей для каждого конкретного приложения.APSHOT на b041f076fcbd с PID 78 (/code/movie-re:: Spring Boot :: (v2.3.4.RELEASE)2021-05-03 22:46:15.549 INFO 78 --- m>
IoC Container
commender-system/target)
2021-05-03 22:46:15.563 INFO 78 — m
Модули - это группы инструментов, сгруппированных по назначению. Разработчики могут указать, какие модули они хотят внедрить помимо базового набора в качестве зависимостей для каждого конкретного приложения.Модули организованы в группы, называемые проектами. Каждый проект содержит модули, разработанные для конкретной платформы или типа приложения. Системы проектов и модулей помогают сделать вашу программу компактной, поскольку вы можете загружать только те инструменты, которые используются в приложении.( ( )\___ | '2021-05-03 22:46:16.458 INFO 78 --- m;//.>
b.m.d.MovieRecommenderSystemApplication : St
Модули Spring и проекты Spring
MovieRecommenderSystemApplication в 1.41 se
conds (JVM работает на 1.855)
Начать работу с Spring
Поздравляем, вы создали свое первое приложение Spring с помощью Spring Boot!
Как начать свой проект
- src/main/java где будет написан код Java
- src/main/resources где написаны свойства приложения
- src/test/javaгде будут написаны тесты. Теперь вы можете щелкнуть правой кнопкой мыши MovieRecommenderSystemApplication.javaи запустить его как приложение Java, чтобы получить следующий вывод консоли.
./\\/\_|_\/_` | \ \ \\