Введение

Spring Framework - это приложение и инверсия контейнера управления для платформы Java. Основные функции фреймворка могут использоваться любым приложением Java, но есть расширения для создания веб-приложений на платформе Java EE (Enterprise Edition). Фреймворк не навязывает какую-либо конкретную модель программирования. Фреймворк стал популярным в сообществе Java в качестве дополнения к модели Enterprise JavaBeans (EJB). Spring Framework - это свободное программное обеспечение с открытым исходным кодом.

История версий

Версия Дата Примечания 0.9 2003 1.0 24 марта 2004 Первый выпуск производства. 2.0 2006 3.0 2009 4.0 2013 5.0 2017 6.0 22 ноября 2022 Первая версия была написана Родом Джонсоном, который выпустил структуру с публикацией своей книги Expert One on One J2EE Design and Development в октябре 2002 года. Фреймворк был впервые выпущен под лицензией Apache 2.0 в июне 2003 года. Первый релиз, 1.0, был выпущен в марте 2004 года. Весна 1.2.6 получила награду Jolt за производительность и награду JAX за инновации в 2006 году. Весна 2.0 была выпущена в октябре 2006 года, Весна 2.5 в ноябре 2007 года, Весна 3.0 в декабре 2009 года, Весна 3.1 в декабре 2011 года и Весна 3.2.5 в ноябре 2013 года. Spring Framework 4.0 был выпущен в декабре 2013 года. Spring Framework 4.2.0 был выпущен 31 июля 2015 года и был немедленно обновлен до версии 4.2.1, которая была выпущена 01 сентября 2015 года. Он "совместим с Java 6, 7 и 8, с акцентом на основные усовершенствования и современные веб-возможности". Spring Framework 4.3 был выпущен 10 июня 2016 года и поддерживался до 2020 года. Он был объявлен "последним поколением в рамках общих системных требований Spring 4 (Java 6+, Servlet 2.5+), [ ]". Spring Framework 6.0 был выпущен 16 ноября 2022 года и поставлялся с базовой линией Java 17+ и переходом на Jakarta EE 9+ (в пространстве имен Jakarta), с акцентом на недавно выпущенные Jakarta EE 10 API, такие как Servlet 6.0 и JPA 3.1.

Перевернутое положение контейнера управления

Контейнер инверсии управления (IoC) является основным контейнером в Spring Framework. Он обеспечивает последовательное средство настройки и управления объектами Java с использованием отражения. Контейнер отвечает за управление жизненными циклами конкретных объектов: создание этих объектов, вызов их методов инициализации и настройка этих объектов путем их подключения. Во многих случаях не нужно использовать контейнер при использовании других частей Spring Framework, хотя его использование, вероятно, облегчит настройку и настройку приложения. Контейнер Spring обеспечивает последовательный механизм конфигурирования приложений и интегрируется практически со всеми средами Java, от небольших приложений до крупных корпоративных приложений. Программист не создает объект напрямую, но описывает, как он должен быть создан, определяя его в файле конфигурации Spring. Аналогичным образом, службы и компоненты не вызываются напрямую; вместо этого файл конфигурации Spring определяет, какие службы и компоненты должны быть вызваны. Этот IoC предназначен для упрощения технического обслуживания и тестирования.

Производство и управление бобами

Объекты, созданные контейнером, называются управляемыми объектами или бобами. Контейнер может быть настроен путем загрузки файлов XML (Extensible Markup Language) или обнаружения конкретных аннотаций Java на классах конфигурации. Эти источники данных содержат определения зерна, которые предоставляют информацию, необходимую для создания зерна. The - это специальная аннотация Spring, которая обозначает класс как класс конфигурации. Конфигурационный класс предоставляет бобы Spring Каждый из методов в классе конфигурации Spring сконфигурирован с аннотацией. Интерфейс затем вернет объекты, сконфигурированные с аннотацией, как бобы. Преимущество конфигурации на основе java над конфигурацией на основе XML заключается в лучшей безопасности типов и рефакторируемости.

Виды инверсии контроля

Существует несколько типов инверсии управления. Инъекция зависимости и поиск зависимости являются примерами инверсии контроля. Объекты могут быть получены с помощью поиска зависимости или инъекции зависимости.

Инъекция зависимости

Инъекция зависимостей - это модель, при которой контейнер передает объекты по имени другим объектам, через конструкторы, свойства или фабричные методы. Существует несколько способов реализации инъекции зависимости: инъекция зависимости на основе конструктора, инъекция зависимости на основе установщика и инъекция зависимости на основе поля.

Поиск зависимостей

Поиск зависимостей - это модель, при которой вызватель спрашивает объект контейнера об объекте с определенным именем или определенного типа.

Автопроводка

Фреймворк Spring имеет функцию, известную как автопроводка, которая использует пружинный контейнер для автоматического удовлетворения зависимостей, указанных в свойствах JavaBean, к объектам соответствующего типа на текущем заводе. Это может произойти только в том случае, если есть только один объект соответствующего типа. Существует несколько аннотаций, которые могут быть использованы для автопроводки POJO, включая аннотацию Spring (а также несколько других аннотаций Spring, которые помогают решить неоднозначность автопроводки, такие как аннотации or), и стандартные аннотации Java и аннотацию можно использовать в классе, который определяет боб, чтобы сообщить Spring о приоритете создания боба при автоматической проводке по имени. Аннотация может быть использована в классе, который определяет боб, чтобы сообщить Spring о приоритете создания боба при автоматическом его подключении по типу. Аннотация соответствует JSR 250 или Common Annotations for the Java Platform. Аннотация используется для автоматического подключения ссылок на POJO по имени. Аннотация соответствует JSR 300 или стандартной аннотации для инъекций. Аннотация используется для автоматического подключения ссылок на POJO по типу.

Рабочий процесс Spring MVC

Когда пользователь нажимает на ссылку или отправляет форму в своем веб-браузере, запрос отправляется в Spring DispatcherServlet. DispatcherServlet - фронтальный контроллер в Spring MVC. Диспетчер-сервлет очень настраиваемый и гибкий. В частности, он способен обрабатывать больше типов обработчиков, чем любые реализации org. пружинные рамки. Сеть. Сервитка. - МВК. Контроллер или орг. пружинные рамки. Стереотип. Контроллер прокомментировал классы. Он консультирует один или несколько операторов. DispatcherServlet выбирает соответствующего контроллера и направляет запрос ему. Контролер обрабатывает конкретный запрос и генерирует результат. Он известен как Модель. Эта информация должна быть отформатирована в html или любой другой технологии, такой как Jakarta Server Pages (также известный как JSP) или Thymeleaf. Это вид приложения. Вся информация находится в объекте Model And View. Когда контроллер не связан с определенным видом, DispatcherServlet находит фактический вид (например, JSP) с помощью ViewResolver.

Веб-сокет

Основное правило эффективного обращения с потоками данных - никогда не блокировать. WebSocket - это жизнеспособное решение этой проблемы. WebSocket Protocol - это транспортный протокол низкого уровня, который позволяет использовать полный дуплекс каналов связи через TCP-соединение. WebSocket действует как альтернатива HTTP, позволяя двустороннюю связь между клиентом и сервером. WebSocket особенно полезен для приложений, требующих частого и быстрого обмена небольшими кусками данных, с высокой скоростью и объемом. Spring поддерживает протокол WebSocket, предоставляя WebSocket API для реактивного приложения. Аннотация @EnableWebSocket предоставляет Websocket функциональность обработки запросов при размещении в классе конфигурации Spring. Обязательным интерфейсом является WebSocketConfigurer, который предоставляет доступ к WebSocketConfigurer. Затем URL-адрес WebSocket отображается к соответствующим обработчикам, используя метод registerWebSocketHandlers ((WebSocketHandlerRegistry).

Весенний WebFlux

Spring WebFlux - это фреймворк, следующий парадигме функционального программирования, предназначенный для создания реактивных Spring-приложений. Эта структура широко использует функциональное программирование и реактивные потоки. Хороший пример использования Spring WebFlux для приложений, требующих отправки и получения мгновенной информации, таких как веб-приложение с возможностью чата. Хотя приложения, использующие технологию Spring WebFlux, обычно менее читаемы, чем их MVC-версии, они более устойчивы и проще в расширении. Spring WebFlux уменьшает необходимость справляться с осложнениями, связанными с синхронизацией доступа к потоку. Spring WebFlux поддерживает события, отправленные сервером (SSE), которые являются технологией серверного подталкивания, которая позволяет клиенту получать автоматические обновления от сервера через HTTP-соединение. Это сообщение однонаправленное и имеет много сходств с моделью публикации/подписки, используемой в JMS.

Отношения с Jakarta Enterprise Beans (EJB)

Контейнер может быть преобразован в частично совместимый с EJB (Enterprise JavaBeans) 3.0 контейнер с помощью проекта Pitchfork. Некоторые критикуют "Весеннюю структуру" за несоблюдение стандартов. Однако SpringSource не рассматривает соответствие EJB 3 как основную цель и утверждает, что Spring Framework и контейнер позволяют создавать более мощные модели программирования.

Уязвимость Spring4Shell

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