Весенняя структура
Разработчик(и) | VMware |
---|---|
Первоначальный выпуск | 1 октября 2002 г |
Стабильная версия | 6.1.4 [1]
/ 15 февраля 2024 г |
Репозиторий | |
Написано в | Ява |
Платформа | Java EE |
Тип | Платформа приложения |
Лицензия | Лицензия Апач 2.0 |
Веб-сайт | весна |
Spring Framework — это платформа приложений и управления инверсия контейнера для платформы Java . [2] Основные функции платформы могут использоваться любым приложением Java, но существуют расширения для создания веб-приложений на основе платформы Java EE (Enterprise Edition). Фреймворк не навязывает какой-либо конкретной модели программирования . [ нужна ссылка ] . Эта платформа стала популярной в сообществе Java как дополнение к модели Enterprise JavaBeans (EJB). [3] Spring Framework — бесплатное программное обеспечение с открытым исходным кодом . [4] : 121–122 [5]
История версий
[ редактировать ]Версия | Дата | Примечания |
---|---|---|
0.9 | 2003 | |
1.0 | 24 марта 2004 г. | Первый серийный выпуск. |
2.0 | 2006 | |
3.0 | 2009 | |
4.0 | 2013 | |
5.0 | 2017 | |
6.0 | 22 ноября 2022 г. | |
6.1 | 16 ноября 2023 г. | |
6.2 | релиз запланирован на ноябрь 2024 г. |
Первая версия была написана Родом Джонсоном , который выпустил фреймворк вместе с публикацией своей книги Expert One-on-One J2EE Design and Development в октябре 2002 года. Впервые фреймворк был выпущен под лицензией Apache 2.0 в июне 2003 года. Версия 1.0 была выпущена в марте 2004 года. [6] Платформа Spring 1.2.6 получила награду за производительность Jolt и премию JAX Innovation Award в 2006 году. [7] [8] Spring 2.0 был выпущен в октябре 2006 года, Spring 2.5 — в ноябре 2007 года, Spring 3.0 — в декабре 2009 года, Spring 3.1 — в декабре 2011 года и Spring 3.2.5 — в ноябре 2013 года. [9] Spring Framework 4.0 был выпущен в декабре 2013 года. [10] Заметные улучшения в Spring 4.0 включали поддержку Java SE (Standard Edition) 8, Groovy 2, [11] [12] некоторые аспекты Java EE 7 и WebSocket . [13]
Spring Framework 4.2.0 был выпущен 31 июля 2015 года и сразу же обновлен до версии 4.2.1, выпущенной 1 сентября 2015 года. [14] Он «совместим с Java 6, 7 и 8, с упором на основные усовершенствования и современные веб-возможности» . [15]
Spring Framework 4.3 был выпущен 10 июня 2016 года и поддерживался до 2020 года. [16] Было объявлено, что это «последнее поколение в рамках общих системных требований Spring 4 (Java 6+, Servlet 2.5+), [...]» . [15]
Объявлено, что Spring 5 будет построен на Reactor Core, совместимом с Reactive Streams . [17] [ устаревший источник ]
Spring Framework 6.0 был выпущен 16 ноября 2022 года и включал базовую версию Java 17+ и переход на Jakarta EE 9+ (в версии jakarta
пространство имен), с упором на недавно выпущенные API-интерфейсы Jakarta EE 10, такие как Servlet 6.0 и JPA 3.1. [18]
Модули
[ редактировать ]Spring Framework включает в себя несколько модулей, которые предоставляют ряд услуг:
- Spring Core Container: это базовый модуль Spring. [19] и предоставляет весенние контейнеры (
BeanFactory
иApplicationContext
). [20] [21] [22] В этом контекстеspring-core
это артефакт [23] находится в основном модуле [24] принадлежащий кorg.springframework
группа. [25]spring-core
артефакт состоит из контейнера IoC, а также служебных классов [23] используется во всем приложении. [26] - Аспектно-ориентированное программирование : позволяет реализовать сквозные задачи . [27] [28]
spring-aop
является артефактом платформы АОП. [24] - Аутентификация и авторизация : настраиваемые процессы безопасности, которые поддерживают ряд стандартов, протоколов, инструментов и практик через Spring Security (ранее Acegi Security System для Spring). подпроект [29] [30]
- Соглашение важнее конфигурации : решение для быстрой разработки корпоративных приложений на базе Spring предлагается в модуле Spring Roo .
- Доступ к данным : работа с системами управления реляционными базами данных на платформе Java с использованием Java Database Connectivity (JDBC) [31] и инструменты объектно-реляционного отображения , а также NoSQL [32] базы данных.
spring-jdbc
— это артефакт, найденный в модуле JDBC, но поддерживающий доступ JDBC за счет включения классов настройки источника данных. [24] - Инверсия контейнера управления: настройка компонентов приложения и управление жизненным циклом объектов Java, выполняемая в основном посредством внедрения зависимостей . [21]
- Обмен сообщениями: декларативная регистрация объектов прослушивателя сообщений для прозрачного получения сообщений из очередей сообщений через службу сообщений Java (JMS), улучшение отправки сообщений по сравнению со стандартными API-интерфейсами JMS. [33]
- Модель-представление-контроллер : платформа на основе HTTP и сервлетов, предоставляющая возможности для расширения и настройки веб-приложений и веб-служб RESTful (передача репрезентативного состояния). [34] [35]
- Платформа удаленного доступа: стиль декларативного удаленного вызова процедур (RPC). [36] сортировка объектов Java по сетям, поддерживающим удаленный вызов методов Java (RMI), [37] CORBA (общая архитектура брокера объектных запросов) и HTTP протоколы на основе , включая веб-службы , такие как SOAP (простой протокол доступа к объектам) . [38] [39]
- Управление транзакциями : объединяет несколько API-интерфейсов управления транзакциями и координирует транзакции для объектов Java. [40] [41]
- Удаленное управление: декларативное предоставление и управление объектами Java для локальной или удаленной настройки с помощью расширений управления Java (JMX). [40] [42]
- Тестирование : классы поддержки для написания модульных тестов. [43] и интеграционные тесты . [44]
- Поддержка WebFlux: поддержка использования реактивных сред выполнения или веб-серверов, таких как UnderTow и Netty . [24] [45]
- Поддержка Web Socket: поддержка связи с использованием протокола WebSocket. Артефакт для этого модуля
spring-websocket
. - Поддержка XML: поддержка сопоставления объектов с XML. [24] такие библиотеки, как Jakarta XML Binding (JAXB) и XStream . Поддерживаются [24] Артефакт для этого модуля
spring-oxm
.
Модули Spring упаковываются в виде файлов JAR. [46] Доступ к этим артефактам можно получить через центральный репозиторий Maven с помощью Maven. [47] или Градл . [48]
Инверсия контейнера управления
[ редактировать ]Контейнер инверсии управления (IoC) — это основной контейнер Spring Framework. [2] Он предоставляет согласованные средства настройки и управления объектами Java. [2] [4] : 127–131 используя отражение . [49] Контейнер отвечает за управление жизненными циклами конкретных объектов: [4] : 128 создавая эти объекты, [50] вызов их инициализации , методов [49] и настройку этих объектов путем их соединения. [51]
Во многих случаях нет необходимости использовать контейнер при использовании других частей Spring Framework, хотя его использование, вероятно, облегчит настройку и настройку приложения. Контейнер Spring предоставляет согласованный механизм настройки приложений. [4] : 122 и интегрируется практически со всеми средами Java, от небольших приложений до крупных корпоративных приложений.
Программист не создает объект напрямую, а описывает, как он должен быть создан, определяя его в файле конфигурации Spring. Аналогично, службы и компоненты не вызываются напрямую; вместо этого файл конфигурации Spring определяет, какие службы и компоненты необходимо вызывать. Этот IoC предназначен для повышения простоты обслуживания и тестирования.
Создание и управление bean-компонентами
[ редактировать ]Объекты, созданные контейнером, называются управляемыми объектами или компонентами . [52] Контейнер можно настроить, загрузив файлы XML (расширяемый язык разметки). [50] [4] : 151–152 или обнаружение определенных аннотаций Java в классах конфигурации. Эти источники данных содержат определения компонентов, которые предоставляют информацию, необходимую для создания компонентов.
The @Configuration
— это аннотация, специфичная для Spring, которая помечает класс как класс конфигурации. Класс конфигурации предоставляет компоненты Spring ApplicationContext
. [53] Каждый из методов класса конфигурации Spring настраивается с помощью @Bean
аннотация. ApplicationContext
интерфейс затем вернет объекты, настроенные с помощью @Bean
аннотация как beans. Преимущество конфигурации на основе Java перед конфигурацией на основе XML заключается в лучшей безопасности типов и возможности рефакторинга. [53]
Виды инверсии управления
[ редактировать ]Существует несколько типов инверсии управления. Внедрение зависимостей и поиск зависимостей являются примерами инверсии управления. [54] Объекты можно получить либо с помощью поиска зависимостей, либо с помощью внедрения зависимостей. [4] : 127 [55]
Внедрение зависимостей
[ редактировать ]Внедрение зависимостей — это шаблон, в котором контейнер передает объекты. [4] : 128 по имени другим объектам, через конструкторы , [4] : 128 свойства или фабричные методы . Существует несколько способов реализации внедрения зависимостей: внедрение зависимостей на основе конструктора, внедрение зависимостей на основе установщика и внедрение зависимостей на основе полей. [56]
Поиск зависимостей
[ редактировать ]Поиск зависимостей — это шаблон, в котором вызывающий объект запрашивает у объекта-контейнера объект с определенным именем или определенного типа.
Автопроводка
[ редактировать ]В среде Spring имеется функция, известная как автоматическое подключение, которая использует контейнер Spring для автоматического удовлетворения зависимостей, указанных в свойствах JavaBean, для объектов соответствующего типа в текущей фабрике. [57] Это может произойти только в том случае, если существует только один объект соответствующего типа. [57]
Существует несколько аннотаций, которые можно использовать для автоматического подключения POJO, включая аннотацию, специфичную для Spring. @Autowire
(а также несколько других аннотаций, специфичных для Spring, которые помогают устранить неоднозначность автоматического связывания, например @Qualifier
или @Primary
аннотации), [58] [59] и стандартные аннотации Java @Resource
и @Inject
. [60]
The @Qualifier
аннотацию можно использовать в классе, который определяет компонент, чтобы сообщить Spring о необходимости определения приоритета создания компонента при его автоматическом подключении по имени. [59]
The @Primary
аннотацию можно использовать в классе, который определяет компонент, чтобы сообщить Spring о необходимости определения приоритета создания компонента при его автоматическом подключении по типу. [59]
The @Resource
аннотация — это аннотация, соответствующая JSR 250 или общим аннотациям для платформы Java. @Resource
аннотация используется для автоматического связывания ссылок на POJO по имени. [60] @Inject
аннотация — это аннотация, соответствующая JSR 300 или стандартным аннотациям для внедрения. @Inject
аннотация используется для автоматического связывания ссылок на POJO по типу. [60]
Фреймворк аспектно-ориентированного программирования
[ редактировать ]Spring Framework имеет собственную структуру аспектно-ориентированного программирования (АОП), которая модульно объединяет сквозные задачи в аспекты . [61] Мотивом создания отдельной структуры АОП является предоставление базовых функций АОП без особых сложностей в проектировании, реализации или настройке. Платформа Spring AOP в полной мере использует преимущества контейнера Spring.
Фреймворк Spring AOP основан на шаблонах прокси . [62] [24] Он настраивается во время выполнения . [ нужна ссылка ] Это устраняет необходимость в этапе компиляции или переплетении во время загрузки. [ нужна ссылка ] С другой стороны, перехват допускает выполнение общедоступного метода только для существующих объектов в точке соединения . [ нужна ссылка ]
По сравнению с инфраструктурой AspectJ Spring AOP менее мощный, но и менее сложный. [ нужна ссылка ] Spring 1.2 включает поддержку настройки аспектов AspectJ в контейнере. В Spring 2.0 добавлена дополнительная интеграция с AspectJ; например, язык pointcut используется повторно и может быть смешан с аспектами Spring AOP. [ нужна ссылка ] Кроме того, в Spring 2.0 добавлена библиотека Spring Aspects, которая использует AspectJ для предоставления общих функций Spring, таких как декларативное управление транзакциями. [62] и внедрение зависимостей через переплетение во время компиляции AspectJ или во время загрузки. [63] SpringSource использует AspectJ AOP в других проектах Spring, таких как Spring Roo и Spring Insight, а Spring Security предлагает библиотеку аспектов на основе AspectJ. [ нужна ссылка ]
Spring AOP был разработан для решения сквозных задач внутри Spring Framework. [4] : 473 Любой объект, созданный и настроенный контейнером, можно расширить с помощью Spring AOP.
Spring Framework использует Spring AOP внутри себя для управления транзакциями, безопасности, удаленного доступа и JMX . [ нужна ссылка ]
Начиная с версии 2.0 платформы Spring предоставляет два подхода к настройке АОП:
- подход на основе схемы [64] [ нужен лучший источник ] и
@AspectJ
-стиль аннотаций. [65] [ нужен лучший источник ]
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
Команда Spring решила не вводить новую терминологию, связанную с АОП. Таким образом, в справочной документации Spring и API такие термины, как аспект , точка соединения, совет , pointcut, введение, целевой объект ( рекомендуемый объект ), прокси-сервер AOP и переплетение, имеют одинаковые значения. [ нужна ссылка ] как и в большинстве других фреймворков АОП (особенно AspectJ).
Структура доступа к данным
[ редактировать ]Инфраструктура доступа к данным Spring решает распространенные трудности, с которыми сталкиваются разработчики при работе с базами данных в приложениях. Обеспечивается поддержка всех популярных фреймворков доступа к данным на Java: JDBC, iBatis / MyBatis , [32] Спящий режим , [32] Объекты данных Java (JDO, поддержка которых прекращена с версии 5.x), [32] Джакартский API персистентности (JPA), [32] Oracle TopLink , Apache OJB и Apache Cayenne и другие.
Для всех этих поддерживаемых платформ Spring предоставляет следующие функции.
- Управление ресурсами – автоматическое получение и освобождение ресурсов базы данных.
- Обработка исключений – преобразование исключений, связанных с доступом к данным, в иерархию доступа к данным Spring. [66]
- Участие в транзакциях – прозрачное участие в текущих транзакциях [4] : 290–291
- Развертывание ресурсов – получение объектов базы данных из оболочек пула соединений.
- Абстракция для больших двоичных объектов (BLOB) и больших символьных объектов (CLOB). обработки
Все эти функции становятся доступными при использовании классов шаблонов, предоставляемых Spring для каждой поддерживаемой платформы. [67] Критики утверждают, что эти классы шаблонов навязчивы и не дают никаких преимуществ перед использованием (например) напрямую Hibernate API. [68] [ не удалось пройти проверку ] В ответ разработчики Spring предоставили возможность напрямую использовать API-интерфейсы Hibernate и JPA. Однако для этого требуется прозрачное управление транзакциями, поскольку код приложения больше не берет на себя ответственность за получение и закрытие ресурсов базы данных. [69] и не поддерживает перевод исключений. [70]
Вместе с управлением транзакциями Spring его инфраструктура доступа к данным предлагает гибкую абстракцию для работы с инфраструктурами доступа к данным. Spring Framework не предлагает общий API доступа к данным; вместо этого сохраняется вся мощь поддерживаемых API. [ нужна ссылка ] Spring Framework — единственная платформа, доступная на Java, которая предлагает среду управляемого доступа к данным за пределами сервера приложений или контейнера. [71] [ нужен лучший источник ]
При использовании Spring для управления транзакциями с помощью Hibernate, возможно, потребуется настроить следующие bean-компоненты:
- А
Datasource
нравитьсяcom.mchange.v2.c3p0.ComboPooledDataSource
илиorg.apache.commons.dbcp.BasicDataSource
[32] - А
SessionFactory
нравитьсяorg.springframework.orm.hibernate3.LocalSessionFactoryBean
сDataSource
атрибут [72] [4] : 173 - А
HibernateProperties
[4] : 173 нравитьсяorg.springframework.beans.factory.config.PropertiesFactoryBean
- А
TransactionManager
нравитьсяorg.springframework.orm.hibernate3.HibernateTransactionManager
сSessionFactory
атрибут [72]
Другие точки настройки включают в себя:
- Конфигурация точек резки AOP.
- Семантика транзакций рекомендаций АОП [ объяснить ] .
Управление транзакциями
[ редактировать ]Структура управления транзакциями Spring привносит в платформу Java механизм абстракции. [73] Его абстракция способна:
- работа с локальными и глобальными транзакциями [4] : 258 (локальная транзакция не требует сервера приложений )
- работа с вложенными транзакциями [74]
- работа с точками сохранения [74]
- работа практически во всех средах платформы Java
Для сравнения, Java Transaction API (JTA) поддерживает только вложенные транзакции и глобальные транзакции и требует сервера приложений (а в некоторых случаях — развертывания приложений на сервере приложений).
Spring Framework предоставляет PlatformTransactionManager
[75] для ряда стратегий управления транзакциями:
- Транзакции, управляемые через соединение JDBC [73]
- Транзакции, управляемые с помощью объектно-реляционного сопоставления. Единицы работы. [73]
- Транзакции, управляемые через JTA [73]
JtaTransactionManager
[76] [4] : 255–257 иUserTransaction
[4] : 234 - Транзакции, управляемые на других ресурсах, таких как объектные базы данных.
Помимо этого механизма абстракции, платформа предоставляет два способа добавления управления транзакциями в приложения:
- Процедурно, используя Spring
TransactionTemplate
[77] - Декларативно, используя метаданные, такие как аннотации XML или Java (
@Transactional
, [62] и т. д.)
Вместе со средой доступа к данным Spring, которая объединяет структуру управления транзакциями, можно настроить транзакционную систему посредством конфигурации, не полагаясь на JTA или EJB . Транзакционная структура также интегрируется с обменом сообщениями. [78] и кэширование [79] двигатели.
Структура модель-представление-контроллер
[ редактировать ]Spring Framework имеет собственную модель-представление-контроллер (MVC) структуру веб-приложений . [35] что изначально не планировалось. Разработчики Spring решили написать свою собственную веб-инфраструктуру в качестве реакции на то, что они считали плохим дизайном популярной (тогда) веб-инфраструктуры Jakarta Struts . [80] [ не удалось пройти проверку ] а также недостатки других доступных рамок. В частности, они чувствовали недостаточное разделение между уровнями представления и обработки запросов, а также между уровнем обработки запросов и моделью. [81]
Как и Struts, Spring MVC — это платформа, основанная на запросах. [4] : 375 Фреймворк определяет стратегические интерфейсы [4] : 144 для всех обязанностей, которые должна выполнять современная структура, основанная на запросах. Цель каждого интерфейса — быть простым и понятным, чтобы пользователям Spring MVC было легко писать свои собственные реализации, если они того пожелают. MVC открывает путь к более чистому интерфейсному коду. Все интерфейсы тесно связаны с API сервлетов . Такая тесная связь с API сервлетов рассматривается некоторыми как неспособность разработчиков Spring предложить высокий уровень абстракции для веб-приложений. [ нужна ссылка ] . Однако эта связь гарантирует, что функции API сервлетов останутся доступными для разработчиков, предлагая при этом структуру с высоким уровнем абстракции, упрощающую работу с ним.
The DispatcherServlet
класс — фронт-контроллер [82] платформы и отвечает за делегирование управления различным интерфейсам на этапах выполнения HTTP-запроса . [83]
Наиболее важные интерфейсы, определенные Spring MVC, и их обязанности перечислены ниже: [84]
Controller
: находится междуModel
иView
для управления входящими запросами и перенаправления на правильный ответ. [85]Controller
сопоставит HTTP-запрос с соответствующими методами. [86] Он действует как ворота, направляющие поступающую информацию. Он переключается между входом вModel
илиView
.HandlerAdapter
: отвечает за выполнение объектов, обрабатывающих входящие запросы. [87]HandlerInterceptor
: отвечает за перехват входящих запросов. [87] Сравним, но не равен фильтрам сервлетов. [4] : 509 (использование необязательно [4] : 511 и не контролируетсяDispatcherServlet
).HandlerMapping
: отвечает за выбор объектов, которые обрабатывают входящие запросы (обработчики) на основе любого атрибута или условия, внутреннего или внешнего по отношению к этим запросам. [83]LocaleResolver
: отвечает за разрешение и, при необходимости, сохранение локали отдельного пользователя. [88]MultipartResolver
: облегчить работу с загрузкой файлов путем упаковки входящих запросов. [89]View
: отвечает за возврат ответа клиенту.View
не должен содержать никакой бизнес-логики и должен представлять только данные, инкапсулированныеModel
. [35] Некоторые запросы могут направляться прямо наView
не заходя вModel
часть; другие могут пройти через все три.ViewResolver
: отвечает за выборView
на основе логического имени дляView
[90] [91] (использование не является строго обязательным [4] : 511 ).Model
: отвечает за инкапсуляцию бизнес-данных. [90]Model
открывается для просмотра контроллером. [4] : 374 (использование не является строго обязательным).
Каждый интерфейс стратегии, описанный выше, несет важную ответственность в общей структуре. Абстракции, предлагаемые этими интерфейсами, являются мощными, поэтому допускают множество вариантов их реализации. [4] : 144 Spring MVC поставляется с реализациями всех этих интерфейсов и предлагает набор функций поверх API сервлетов. Однако разработчики и поставщики могут свободно писать и другие реализации. Spring MVC использует Java java.util.Map
интерфейс как ориентированная на данные абстракция для Model
где должны находиться ключи String
ценности. [ нужна ссылка ]
Простота тестирования реализаций этих интерфейсов является одним из важных преимуществ высокого уровня абстракции, предлагаемого Spring MVC. [92] [4] : 324 DispatcherServlet
тесно связан с контейнером управления Spring Inversion для настройки веб-уровней приложений. Однако веб-приложения могут использовать другие части Spring Framework, включая контейнер, и не использовать Spring MVC.
Рабочий процесс Spring MVC
[ редактировать ]Когда пользователь нажимает ссылку или отправляет форму в своем веб-браузере, запрос передается в Spring. DispatcherServlet
. DispatcherServlet
— это фронт-контроллер в Spring MVC. [83] [93] DispatcherServlet
очень настраиваемый и гибкий. [93] В частности, он способен обрабатывать больше типов обработчиков, чем любая реализация org.
springframework.web.servlet.mvc.Controller
или org.
springframework.stereotype.Controller
аннотированные классы. [93] Он обращается к одному или нескольким сопоставлениям обработчиков. [83] DispatcherServlet
выбирает подходящий контроллер и пересылает ему запрос. Controller
обрабатывает конкретный запрос и генерирует результат. Он известен как Model
. Эта информация должна быть отформатирована в формате html или в любой интерфейсной технологии, например Jakarta Server Pages (также известной как JSP). [83] [94] или Тимелеаф . [94] Это View
приложения. [83] Вся информация находится в Model
И View
объект. Когда контроллер не привязан к определенному виду, DispatcherServlet
находит фактическое View
(например, JSP) с помощью ViewResolver
. [83] [4] : 390–391
Конфигурация DispatcherServlet
[ редактировать ]Начиная с версии 3.0 спецификации сервлета, существует несколько способов настройки DispatcherServlet: [95]
- Настроив его в
web.xml
как показано ниже: [95]
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/<url-pattern>
</servlet-mapping>
- Настроив его в
web-fragment.xml
[95] - Используя
javax.servlet.ServletContainerInitializer
[95] - Реализуя
org.springframework.web.WebApplicationInitializer
интерфейс. [95] - Используя встроенную автоконфигурацию Spring Boot, которая использует
SpringBootServletInitializer
сорт. [95]
Платформа удаленного доступа
[ редактировать ]Платформа удаленного доступа Spring — это абстракция для работы с различными технологиями на основе RPC ( удаленный вызов процедур ), доступными на платформе Java как для подключения клиентов, так и для маршалинга объектов на серверах. [96] Наиболее важной особенностью, предлагаемой этой структурой, является максимальное упрощение настройки и использования этих технологий за счет сочетания инверсии управления и АОП.
Платформа обеспечивает восстановление после сбоев (автоматическое повторное подключение после сбоя соединения) и некоторые оптимизации для использования на стороне клиента удаленных сессионных компонентов EJB без сохранения состояния .
Spring обеспечивает поддержку этих протоколов и продуктов «из коробки».
- Протоколы на основе HTTP
- Hessian : протокол двоичной сериализации, [97] [4] : 335 с открытым исходным кодом [4] : 335 и поддерживается CORBA протоколами на основе [ нужна ссылка ] . Hessian поддерживается компанией Caucho . [4] : 335 Hessian подходит для нужд удаленного взаимодействия без сохранения состояния, в частности для связи Java-Java. [4] : 335–336
- Burlap: двоичный протокол на основе XML с открытым исходным кодом, который также поддерживается компанией Caucho . [97] [4] : 335 Единственное преимущество использования Burlap вместо Hessian заключается в том, что он допускает синтаксический анализ XML и удобен для чтения человеком . [4] : 335 Для связи Java-Java предпочтителен гессиан, поскольку он более легкий и эффективный. [4] : 335
- RMI (1): вызовы методов с использованием инфраструктуры RMI, но специфичные для Spring. [96]
- RMI (2): вызовы методов с использованием интерфейсов RMI, соответствующих обычному использованию RMI. [96]
- RMI-IIOP ( CORBA ): вызовы методов с использованием RMI-IIOP/CORBA.
- Enterprise JavaBean Интеграция клиента [98]
- Подключение к локальному сеансовому компоненту EJB без сохранения состояния: подключение к локальному сеансовому компоненту без сохранения состояния
- Удаленное подключение сессионных компонентов EJB без сохранения состояния: подключение к удаленным сессионным компонентам без сохранения состояния.
- МЫЛО
- Интеграция с Apache Axis. платформой веб-сервисов [99]
Apache CXF обеспечивает интеграцию с Spring Framework для экспорта объектов в стиле RPC на стороне сервера. [99]
Настройка клиента и сервера для всех протоколов и продуктов в стиле RPC, поддерживаемых средой удаленного доступа Spring (за исключением поддержки Apache Axis), настраивается в контейнере Spring Core.
Существует альтернативная реализация с открытым исходным кодом (Cluster4Spring) подсистемы удаленного взаимодействия, включенная в Spring Framework, которая предназначена для поддержки различных схем удаленного взаимодействия (1-1, 1-множество, обнаружение динамических сервисов). [ нужна ссылка ]
Быстрая разработка приложений без ограничений по конфигурации
[ редактировать ]Весенние ботинки
[ редактировать ]Spring Boot Extension — это решение Spring, основанное на соглашениях над конфигурацией , для создания автономных приложений производственного уровня. [100] Приложения на основе Spring, которые можно «просто запустить». [101] Он предварительно настроен с учетом «самоуверенного взгляда» команды Spring. [102] [103] лучших настроек и использования платформы Spring и сторонних библиотек, чтобы вы могли приступить к работе с минимальными усилиями. Большинству приложений Spring Boot требуется очень небольшая настройка Spring. [104]
Ключевые особенности:
- Создание автономных приложений Spring
- Встроить Tomcat или Jetty [105] напрямую (нет необходимости развертывать WAR ) файлы
- Предоставьте самоуверенные «начальные» объектные модели проекта (POM), чтобы упростить Maven / Gradle . конфигурацию [106]
- Автоматически настраивайте Spring, когда это возможно. [107]
- Обеспечить готовность к производству [100] такие функции, как метрики , [108] проверки здоровья [108] и внешняя конфигурация [109]
- Абсолютно нет генерации кода [105] и никаких требований [106] для конфигурации XML. [110]
- Плавная интеграция и поддержка всех шаблонов корпоративной интеграции.
Спринг Роо
[ редактировать ]Spring Roo — это проект сообщества, который предоставляет альтернативный подход, основанный на генерации кода, при использовании соглашения над конфигурацией для быстрого создания приложений на Java . В настоящее время он поддерживает Spring Framework, Spring Security и Spring Web Flow . Roo отличается от других сред быстрой разработки приложений тем, что фокусируется на:
- Расширяемость (через дополнения)
- Производительность платформы Java (в отличие от других языков)
- Предотвращение блокировки (Roo можно удалить в течение нескольких минут из любого приложения)
- Избежание выполнения во время выполнения (с соответствующими преимуществами развертывания)
- Удобство использования (особенно благодаря функциям оболочки и шаблонам использования)
Пакетная структура
[ редактировать ]Spring Batch — это платформа для пакетной обработки , которая предоставляет функции многократного использования, необходимые при обработке больших объемов записей, в том числе:
- регистрация / отслеживание
- управление транзакциями
- статистика обработки заданий [111]
- перезапуск задания
Он предоставляет более продвинутые технические услуги и функции, которые позволяют выполнять чрезвычайно большие объемы [112] и высокопроизводительные пакетные задания [111] посредством оптимизации и разделения [111] техники.
Spring Batch выполняет ряд заданий; задание состоит из множества шагов, и каждый шаг состоит из задачи «ЧТЕНИЕ-ОБРАБОТКА-ЗАПИСЬ» или задачи одной операции (тасклета). «Одна» задача операции также известна как тасклет. [113] Это означает выполнение только одной задачи, например очистку ресурсов до или после начала или завершения шага.
Процесс «ЧТЕНИЕ-ОБРАБОТКА-ЗАПИСЬ» состоит из следующих шагов: «прочитать» данные из ресурса ( значения, разделенные запятыми (CSV), XML или база данных), «обработать» их, затем «записать» в другие ресурсы ( CSV, XML или база данных). Например, шаг может считывать данные из файла CSV, [113] обработать его и записать в базу данных. Spring Batch предоставляет множество классов для чтения/записи CSV, XML и базы данных. [114]
Шаги могут быть объединены в цепочку и выполняться как задание. [113]
Структура интеграции
[ редактировать ]Spring Integration — это платформа для интеграции корпоративных приложений , которая предоставляет повторно используемые функции, необходимые для архитектур обмена сообщениями или событийно-ориентированных архитектур .
- маршрутизаторы — направляет сообщение в канал сообщений в зависимости от условий [115]
- преобразователи — преобразуют/преобразовывают/изменяют полезную нагрузку сообщения и создают новое сообщение с преобразованной полезной нагрузкой. [116]
- адаптеры – интегрируются с другими технологиями и системами (HTTP, AMQP (Advanced Message Queuing Protocol), [117] JMS (служба сообщений Java), XMPP (расширяемый протокол обмена сообщениями и присутствия), SMTP (простой протокол передачи почты), [118] IMAP (протокол доступа к сообщениям в Интернете), FTP (протокол передачи файлов), а также FTPS / SFTP , файловые системы и т. д.)
- фильтры – фильтрует сообщение по критериям. Если критерии не выполняются, сообщение удаляется. [119]
- Активаторы службы – вызывают операцию над объектом службы. Spring поддерживает использование аннотации
@ServiceActivator
чтобы объявить компонент, которому требуется эта функциональность. [120] - управление и аудит
- шлюзы — предоставляют клиенту интерфейс для запрошенных служб. За предоставление этого интерфейса отвечает промежуточное программное обеспечение обмена сообщениями. Этот интерфейс отделяет промежуточное программное обеспечение обмена сообщениями от клиента, скрывая базовые API-интерфейсы JMS или Spring Integration. Шлюзы связаны с паттерном Фасад . Класс интеграции Spring,
SimpleMessagingGateway
, обеспечивает необходимую поддержку шлюзов.SimpleMessagingGateway
позволяет приложению Spring указать канал, который отправляет запросы, и канал, который ожидает получения ответов. Основное внимание вSimpleMessagingGateway
заключается в работе с полезной нагрузкой, что избавляет клиента от сложных деталей передаваемых и полученных сообщений.SimpleMessagingGateway
используется вместе с каналами для обеспечения интеграции с файловыми системами, JMS, электронной почтой или любыми другими системами, которым требуются полезные данные и каналы. [121] - Splitter — разделяет большую полезную нагрузку на более мелкие для поддержки различных потоков обработки. Разделитель достигается в Spring с использованием компонента разделителя. Компонент сплиттера обычно перенаправляет сообщения классам с более специализированными функциями. Весна поддерживает
@Splitter
аннотация для объявления компонента, которому требуется эта функциональность. [122] - агрегатор — используется для объединения множества сообщений в один результат. Грубо говоря, агрегатор — это обратная сторона сплиттера. Агрегатор публикует одно сообщение для всех последующих компонентов. Весна поддерживает
@Aggregator
аннотация для объявления компонента, которому требуется эта функциональность. [122]
Spring Integration поддерживает архитектуры на основе каналов и фильтров.
Весенний веб-сокет
[ редактировать ]Важным правилом эффективной работы с потоками данных является никогда не блокировать. [123] WebSocket является жизнеспособным решением этой проблемы. [123] Протокол WebSocket — это транспортный протокол низкого уровня , который обеспечивает полнодуплексные каналы связи через TCP-соединение . WebSocket действует как альтернатива HTTP, обеспечивая двустороннюю связь между клиентом и сервером. WebSocket особенно полезен для приложений, которым требуется частый и быстрый обмен небольшими фрагментами данных с высокой скоростью и объемом. [123]
Spring поддерживает протокол WebSocket, предоставляя API WebSocket для реактивного приложения. @EnableWebSocket
аннотация предоставляет функциональность обработки запросов Websocket при размещении в классе конфигурации Spring. Обязательным интерфейсом является WebSocketConfigurer
который предоставляет доступ к WebSocketConfigurer
. Затем URL-адрес Websocket сопоставляется с соответствующими обработчиками путем реализации метода RegisterWebSocketHandlers(WebSocketHandlerRegistry). [124]
Весенний WebFlux
[ редактировать ]Spring WebFlux — это фреймворк, следующий парадигме функционального программирования и предназначенный для создания реактивных приложений Spring. Этот фреймворк широко использует функциональное программирование и реактивные потоки. Хорошим вариантом использования Spring WebFlux является приложение, требующее мгновенной отправки и получения информации, например веб-приложение с возможностью общения в чате. [125]
Хотя приложения, использующие технологию Spring WebFlux, обычно менее читаемы, чем их аналоги MVC, они более устойчивы и их проще расширять. [126] Spring WebFlux уменьшает необходимость иметь дело с трудностями, связанными с синхронизацией доступа к потокам. [126]
Spring WebFlux поддерживает события, отправленные сервером (SSE), которые представляют собой технологию push-уведомлений сервера, позволяющую клиенту получать автоматические обновления с сервера через HTTP-соединение. Эта связь является однонаправленной и имеет много общего с моделью публикации/подписки, используемой в JMS. [123]
Отношения с Jakarta Enterprise Beans (EJB)
[ редактировать ]Контейнер можно превратить в частично совместимый контейнер EJB (Enterprise JavaBeans) 3.0 с помощью проекта Pitchfork. [ нужна ссылка ] Некоторый [ ВОЗ? ] критиковать Spring Framework за несоответствие стандартам. [127] [ не удалось пройти проверку ] Однако SpringSource не считает соответствие EJB 3 основной целью и утверждает, что Spring Framework и контейнер позволяют использовать более мощные модели программирования. [128] [ не удалось пройти проверку ]
Уязвимость Spring4Shell
[ редактировать ]Уязвимость удаленного выполнения кода, затрагивающая определенные версии Spring Framework, была опубликована в апреле 2022 года под CVE — 2022-22965 . Ему было присвоено имя Spring4Shell в связи с недавней уязвимостью Log4Shell , обе из которых имеют схожие доказательства концепции, позволяющие злоумышленникам на уязвимых машинах получить доступ к оболочке. [129] или даже полный контроль. [130]
См. также
[ редактировать ]- Апачский гобелен
- Гугл Гуйс
- Спящий режим (фреймворк)
- Список Java-фреймворков
- Сравнение веб-фреймворков
- Весенний веб-поток
Цитаты
[ редактировать ]- ^ «Релиз v6.1.4» .
- ^ Jump up to: а б с Дейнум и др. 2014 , с. 47, §2 Основные задачи Spring.
- ^ Дейнум и др. 2014 , стр. 694–698, §16-2 Интеграция двух систем с использованием JMS.
- ^ Jump up to: а б с д и ж г час я дж к л м н тот п д р с т в v В х и С аа аб и объявление но Джонсон и Хеллер 2004 .
- ^ Дейнум и Космина 2021 , с. 1, §1 Настройка локальной среды разработки.
- ^ «Выпущена финальная версия Spring Framework 1.0» . Официальный блог Spring Framework . 24 марта 2014 года . Проверено 1 марта 2021 г.
- ^ Победители Jolt 2006 г.
- ^ «Награда за инновации JAX Gewinner 2006» . Архивировано из оригинала 17 августа 2009 г. Проверено 12 августа 2009 г.
- ^ «Выпущена Spring Framework 3.2.5» . Официальный сайт весны . 7 ноября 2013 г. Проверено 16 октября 2016 г.
- ^ «Анонс выпуска общедоступной версии Spring Framework 4.0» . Весенний блог. 12 декабря 2013 г.
- ^ Стены 2016 , стр. 92–106, §5.
- ^ Космина и др. 2017 , стр. 125–126, §4 Подробное описание конфигурации Spring и Spring Boot.
- ^ Космина и др. 2017 , стр. 1–18, §1 Знакомство с весной.
- ^ «Spring Framework 4.2 выходит в общедоступном виде» . Весенний блог. 31 июля 2015 г.
- ^ Jump up to: а б «Spring Framework 4.2 выходит в общедоступном виде» . Весенний блог.
- ^ «Версии Spring Framework: поддерживаемые версии» . github.com .
- ^ «Реактивная весна» . Весенний блог. 9 февраля 2016 г.
- ^ «Spring Framework 6.0 выходит в общедоступном виде» . Весенний блог. 16 ноября 2022 г.
- ^ Стены 2019 , с. 48.
- ^ Документация Spring Framework для основного контейнера.
- ^ Jump up to: а б Джонсон и др. 2005 , Глава §2 — Фабрика компонентов и контекст приложения.
- ^ Дейнум и др. 2014 , с. 137, §3-1 Использование Java Config для настройки POJO.
- ^ Jump up to: а б Джонсон и Хеллер 2004 , с. 150, Знакомство со Spring Framework — Core Bean Factory.
- ^ Jump up to: а б с д и ж г Deinum & Cosmina 2021 , стр. 22–25, §2 Основы Spring Framework — Spring Framework.
- ^ Стены 2016 , с. 240, §Приложение D. Зависимости Spring Boot.
- ^ Джонсон и др. 2005 , Глава §1. Знакомство со Spring Framework — Краткое описание модуля.
- ^ Джонсон и др. 2005 , Глава §4 — Spring и АОП.
- ^ Дейнум и др. 2014 , стр. 196–198, §3–17 Введение в АОП для POJO.
- ^ Джонсон и др. 2005 г. , Система безопасности Acegi для весны.
- ^ Дейнум и др. 2014 , с. 331, §7 Весенняя безопасность.
- ^ Стены 2019 , стр. 56–59.
- ^ Jump up to: а б с д и ж Дейнум и др. 2014 , стр. 419–426, §10 Доступ к данным.
- ^ Дейнум и др. 2014 , стр. 677–681, §15-4. Создание POJO, управляемых сообщениями, в Spring.
- ^ Джонсон и др. 2005 , Глава §12 — Web MVC Framework.
- ^ Jump up to: а б с Дейнум и др. 2014 , с. 217, §4 Весна @MVC.
- ^ Дейнум и др. 2014 , стр. 525–534, §12-3. Написание пользовательских ItemWriter и ItemReader.
- ^ Дейнум и др. 2014 , стр. 627–632, §14-7 Предоставление и вызов служб через RMI; §14-8 Предоставление и вызов служб через HTTP.
- ^ Дейнум и др. 2014 , стр. 641–658, §14-10 Введение в первые веб-службы SOAP по контракту, §14-11 Предоставление и вызов веб-служб SOAP с помощью Spring-WS, §14-12 Разработка веб-служб SOAP с помощью Spring-WS и маршаллинга XML .
- ^ Джонсон и др. 2005 г. , Глава §8 — Упрощенное удаленное взаимодействие.
- ^ Jump up to: а б Джонсон и др. 2005 г. , Глава §9 – Вспомогательные услуги.
- ^ Дейнум и др. 2014 , с. 475, §11 Управление транзакциями Spring.
- ^ Дейнум и др. 2014 , с. 591, §14 Spring Java Enterprise Services и технологии удаленного взаимодействия.
- ^ Дейнум и др. 2014 , стр. 737–739, §17-3 Модульное тестирование контроллеров Spring MVC.
- ^ Дейнум и др. 2014 , стр. 739–743, §17-4 Управление контекстами приложений в интеграционных тестах.
- ^ Мусиб 2022 , с. 358, §8.3 Знакомство с Spring WebFlux.
- ^ Космина и др. 2017 , стр. 21-23.
- ^ Космина и др. 2017 , стр. 24–25, §2 Доступ к модулям Spring с помощью Maven.
- ^ Космина и др. 2017 , с. 26, §2 Доступ к модулям Spring с помощью Gradle.
- ^ Jump up to: а б Дейнум и др. 2014 , стр. 53–62, §2-2. Создание POJO путем вызова конструктора.
- ^ Jump up to: а б Дейнум и др. 2014 , стр. 48–52, §2-1. Управление и настройка POJO с помощью контейнера Spring IoC.
- ^ Дейнум и др. 2014 , стр. 59–67, §2–3. Используйте ссылки POJO, автоматическое подключение и импорт для взаимодействия с другими POJO.
- ^ Дейнум и др. 2014 , стр. 112–116, §2–16. Используйте редакторы свойств весной.
- ^ Jump up to: а б Walls 2019 , стр. 4–6, §1.1 Начало работы с Spring — Что такое Spring.
- ^ Космина и др. 2017 , с. 37, §3 Знакомство с IoC и DI весной.
- ^ В чем разница между поиском зависимостей и внедрением зависимостей — Spring Forum . Forum.springsource.org (28 октября 2009 г.). Проверено 24 ноября 2013 г.
- ^ Deinum & Cosmina 2021 , стр. 26–32, §2 Основы Spring Framework — внедрение зависимостей.
- ^ Jump up to: а б Johnson & Hoeller 2004 , стр. 135–137, §6 Легкие контейнеры и инверсия управления - Контейнеры МОК.
- ^ Дейнум и др. 2014 , стр. 145–151, §3–3. Используйте ссылки POJO и автоматическое подключение для взаимодействия с другими POJO.
- ^ Jump up to: а б с Космина и др. 2017 , стр. 112–120, §3. Знакомство с IoC и DI весной — автоматическое подключение ваших компонентов.
- ^ Jump up to: а б с Дейнум и др. 2014 , стр. 101-1. 151–154, §3-4 Автоматическое связывание POJO с аннотациями @Resource и @Inject.
- ^ Дейнум и др. 2014 , стр. 99–104, §2-12 Аспектно-ориентированное программирование.
- ^ Jump up to: а б с Дейнум и др. 2014 , стр. 492–494, §11-6 Декларативное управление транзакциями с помощью аннотации @Transactional.
- ^ Дейнум и др. 2014 , стр. 509–510, §11–11 Управление транзакциями с помощью плетения во время загрузки.
- ^ Spring Конфигурация XML AOP
- ^ Конфигурация аннотации AspectJ
- ^ Дейнум и др. 2014 , стр. 441–446, §10-5 Обработка исключений в Spring JDBC Framework.
- ^ Дейнум и др. 2014 , стр. 426–441, 463–465.
- ^ Спящий режим против Spring
- ^ Дейнум и др. 2014 , стр. 463–466, §10-8. Сохраняющиеся объекты с помощью шаблонов ORM Spring.
- ^ Дейнум и др. 2014 , стр. 446–462, §10-6 Проблемы с прямым использованием фреймворков ORM.
- ^ «Spring Data JPA для абстракции запросов» . 6 февраля 2018 года . Проверено 06 февраля 2018 г.
- ^ Jump up to: а б Дейнум и др. 2014 , стр. 456–460, §10-7 Настройка фабрик ресурсов ORM весной.
- ^ Jump up to: а б с д Дейнум и др. 2014 , стр. 464–468, §11-2 Выбор реализации менеджера транзакций.
- ^ Jump up to: а б Дейнум и др. 2014 , стр. 494–499, §11-7 Установка атрибута транзакции распространения.
- ^ Дейнум и др. 2014 , стр. 482–484, §11-2 Выбор реализации менеджера транзакций.
- ^ Дейнум и др. 2014 , стр. 484–486, §11-3 Программное управление транзакциями с помощью API диспетчера транзакций.
- ^ Дейнум и др. 2014 , стр. 486–489, §11-4 Программное управление транзакциями с помощью шаблона транзакции.
- ^ Дейнум и др. 2014 , стр. 677–685, §15-4. Создание POJO, управляемых сообщениями, в Spring.
- ^ Дейнум и др. 2014 , стр. 685–686, §15-5 Кэшируйте и объединяйте соединения JMS.
- ^ Введение в Spring Framework
- ^ Джонсон, Эксперт по индивидуальному проектированию и разработке J2EE, гл. 12. и др.
- ^ Шаблоны архитектуры корпоративных приложений: фронт-контроллер
- ^ Jump up to: а б с д и ж г Дейнум и др. 2014 , стр. 217–232, §4-1 Разработка простого веб-приложения с помощью Spring MVC.
- ^ Deinum & Cosmina 2021 , стр. 82–83, §4 Архитектура Spring MVC. Краткое описание обработки запросов.
- ^ Дейнум и др. 2014 , стр. 217–219, §4-1 Разработка простого веб-приложения с помощью Spring MVC.
- ^ Стены 2019 , стр. 18–19.
- ^ Jump up to: а б Дейнум и др. 2014 , стр. 236–239, §4-3 Перехват запросов с помощью перехватчиков-обработчиков.
- ^ Дейнум и др. 2014 , стр. 239–240, §4-4 Разрешение пользовательских локалей.
- ^ Deinum & Cosmina 2021 , стр. 75–76, §4 Архитектура Spring MVC — подготовка запроса.
- ^ Jump up to: а б Дейнум и др. 2014 , стр. 243–247, §4–6 Разрешение представлений по именам.
- ^ Дейнум и Космина 2021 , с. 81, §4 Архитектура Spring MVC — визуализация представления.
- ^ Дейнум и др. 2014 , стр. 723, §17 Весеннее тестирование.
- ^ Jump up to: а б с Deinum & Cosmina 2021 , стр. 73–74, §4 Архитектура Spring MVC — рабочий процесс обработки запросов DispatcherServlet.
- ^ Jump up to: а б Стены 2019 , с. 35.
- ^ Jump up to: а б с д и ж Deinum & Cosmina 2021 , стр. 84–90, §4 Архитектура Spring MVC — начальная загрузка DispatcherServlet.
- ^ Jump up to: а б с Дейнум и др. 2014 , стр. 627–632, §14-7. Предоставление и вызов служб через RMI.
- ^ Jump up to: а б Дейнум и др. 2014 , стр. 632–635, §14-8. Предоставление и вызов служб через HTTP.
- ^ Дейнум и др. 2014 , стр. 692–694, §16-1 Интеграция одной системы с другой с использованием EAI.
- ^ Jump up to: а б Дейнум и др. 2014 , стр. 635–641, §14-9. Открытие и вызов веб-служб SOAP с помощью JAX-WS.
- ^ Jump up to: а б Стены 2016 , с. vii, §предисловие.
- ^ «Весенний ботинок» . весна.io.
- ^ Стены 2016 , с. 48, §2.4.
- ^ Deinum & Cosmina 2021 , стр. 21–22, §2 Основы Spring Framework.
- ^ Стены 2016 , стр. 37–48, §2.3.
- ^ Jump up to: а б Стены 2016 , с. 7, §1.1.3.
- ^ Jump up to: а б Стены 2016 , с. х, §Предисловие.
- ^ Стены 2016 , стр. 4–5, §1.1.2.
- ^ Jump up to: а б Стены 2016 , стр. 124–139, §7.
- ^ Стены 2016 , стр. 49–69, §3.1–§3.2.3.
- ^ «О Spring Boot» . Проверено 18 марта 2020 г.
- ^ Jump up to: а б с Дейнум и др. 2014 , стр. 536–541, §12-7 Управление выполнением шагов.
- ^ Дейнум и др. 2014 , стр. 714–717, §16-9 Организация событий с использованием Spring Batch.
- ^ Jump up to: а б с Дейнум и др. 2014 , стр. 518–524, §12-2 Чтение и письмо.
- ^ Дейнум и др. 2014 , стр. 511–512, §12 Весенняя партия.
- ^ Дейнум и др. 2014 , стр. 713–714, §16-8 Условная маршрутизация с помощью маршрутизаторов.
- ^ Дейнум и др. 2014 , стр. 704–707, §16-5 Преобразование сообщения из одного типа в другой.
- ^ Дейнум и др. 2014 , стр. 686–690, §15-6. Отправка и получение сообщений AMQP с помощью Spring.
- ^ Дейнум и др. 2014 , стр. 613–620, §14-4. Отправка электронной почты с помощью поддержки электронной почты Spring.
- ^ Дейнум и др. 2014 , с. 406, §9-2 Использование Spring в ваших сервлетах и фильтрах.
- ^ Дейнум и др. 2014 , стр. 695–698, §16-2 Интеграция двух систем с использованием JMS.
- ^ Дейнум и др. 2014 , стр. 717–722, §16-10 Использование шлюзов.
- ^ Jump up to: а б Дейнум и др. 2014 , стр. 710–713, §16-7 Управление интеграцией разветвлений: сплиттеры и агрегаторы.
- ^ Jump up to: а б с д Дейнум и Космина 2021 , стр. 101-1. 422–425, §11 Протокол WebSocket.
- ^ Деинум и Космина 2021 , стр. 107-1. 425–432, §11 Протокол WebSocket.
- ^ Дейнум и Космина 2021 , с. 369, §10 Создание реактивных приложений с помощью Spring WebFlux.
- ^ Jump up to: а б Дейнум и Космина 2021 , с. 421, §11 Защита приложений Spring WebFlux.
- ^ Весна против EJB3
- ^ «Часто задаваемые вопросы о вилах» . Проверено 6 июня 2006 г.
- ^ «Spring4Shell: критическая уязвимость в Spring — официальный блог Касперского» .
- ^ Чиргвин, Ричард (4 апреля 2022 г.). «VMware возникла из-за уязвимости Spring4shell» . itnews.com.au. Архивировано из оригинала 13 февраля 2024 года . Проверено 13 февраля 2024 г.
Ссылки
[ редактировать ]- Космина, Юлиана; Харроп, Роб; Шефер, Крис; Хо, Кларенс (2017). Про Весну 5 . Беркли, Калифорния: Apress. дои : 10.1007/978-1-4842-2808-1 . ISBN 978-1-4842-2807-4 .
- Дейнум, Мартен; Космина, Юлиана (2021). Pro Spring MVC с WebFlux . Беркли, Калифорния: Apress. два : 10.1007/978-1-4842-5666-4 . ISBN 978-1-4842-5665-7 .
- Дейнум, Мартен; Лонг, Джош; Мак, Гэри; Рубио, Дэниел (2014). Весенние рецепты . Беркли, Калифорния: Apress. дои : 10.1007/978-1-4302-5909-1 . ISBN 978-1-4302-5908-4 .
- Джонсон, Род; Хеллер, Юрген; Арендсен, Алеф; Рисберг, Томас; Сампаляну, Колин (8 июля 2005 г.). Профессиональная разработка Java с использованием Spring Framework (первое издание). Врокс Пресс . п. 672. ИСБН 0-7645-7483-3 .
- Харроп, Роб; Махачек, Ян (31 января 2005 г.). Про Весну (Первое изд.). Апресс . п. 832. ИСБН 1-59059-461-4 .
- Джонсон, Род; Юрген, Хеллер (23 октября 2002 г.). Разработка J2EE без EJB (Первое изд.). Врокс Пресс . п. 768. ИСБН 0-7645-5831-5 .
- Джонсон, Род; Юрген, Холлер (октябрь 2002 г.). Экспертное индивидуальное проектирование и разработка J2EE (первое издание). Врокс Пресс . п. 750 . ISBN 0-7645-4385-7 .
- Джонсон, Род; Хеллер, Юрген (2004). Экспертная индивидуальная разработка J2EE без EJB . Индианаполис, Индиана: Уайли. ISBN 978-0-7645-5831-3 .
- Мусиб, Сомнатх (12 июля 2022 г.). Spring Boot на практике . Саймон и Шустер. ISBN 978-1-61729-881-3 .
- Поллак, Марк; Гирке, Оливер; Рисберг, Томас; Брисбин, Джон; Голод, Майкл (31 октября 2012 г.). Весенние данные (Первое изд.). О'Рейли . п. 316. ИСБН 978-1449323950 .
- Сарин, Ашиш (27 июня 2016 г.). Начало работы с Spring Framework (Третье изд.). Самостоятельно опубликовано . п. 626. ИСБН 978-1534985087 .
- Лонг, Джош (27 августа 2013 г.). Spring Framework LiveLessons (первое издание). Аддисон-Уэсли Профессионал . стр. 4+ часов. ISBN 978-0-13-346307-1 .
- Уоллс, Крейг (3 января 2016 г.). Spring Boot в действии . Мэннинг . ISBN 978-1-61729-254-5 .
- Уоллс, Крейг (2019). Весна в действии . Мэннинг . ISBN 978-1-61729-494-5 .
- «Награда за инновации JAX Gewinner 2006» . Архивировано из оригинала 17 августа 2009 г. Проверено 12 августа 2009 г.
- «Часто задаваемые вопросы о вилах» . Проверено 6 июня 2006 г.
- «Анонс выпуска общедоступной версии Spring Framework 4.0» . Весенний блог. 12 декабря 2013 г.