Spring Framework - Spring Framework

Spring Framework
Логотип Spring Framework 2018.svg
Разработчики)Основное программное обеспечение
изначальный выпуск1 октября 2002 г.; 18 лет назад (2002-10-01)
Стабильный выпуск
5.3.1 / 10 ноября 2020 г.; 17 дней назад (2020-11-10)[1]
Предварительный выпуск
5.3.0-RC2 / 14 октября 2020 г.; 44 дней назад (2020-10-14)[2]
РепозиторийSpring репозиторий
Написано вЯва
ПлатформаJava EE
ТипФреймворк приложения
ЛицензияЛицензия Apache 2.0
Интернет сайтвесна.io

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

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

ВерсияДатаПримечания
0.92002
1.02003
2.02006
3.02009
4.02013
5.02017

Первую версию написал Род Джонсон, выпустивший фреймворк с публикацией своей книги Индивидуальное проектирование и разработка J2EE для экспертов в октябре 2002 года. Фреймворк был впервые выпущен под Лицензия Apache 2.0 в июне 2003 года. Первый этапный выпуск, 1.0, был выпущен в марте 2004 года с последующими этапными выпусками в сентябре 2004 года и марте 2005 года. Фреймворк Spring 1.2.6 выиграл Награда за высокую производительность и Награда за инновации JAX (Java API для XML) в 2006 году.[3][4] Spring 2.0 был выпущен в октябре 2006 года, Spring 2.5 в ноябре 2007 года, Spring 3.0 в декабре 2009 года, Spring 3.1 в декабре 2011 года и Spring 3.2.5 в ноябре 2013 года.[5] Spring Framework 4.0 был выпущен в декабре 2013 года.[6] Заметные улучшения в Spring 4.0 включают поддержку Java SE (Standard Edition) 8, Groovy 2, некоторые аспекты Java EE 7 и WebSocket.

Spring Framework 4.2.0 был выпущен 31 июля 2015 года и сразу же был обновлен до версии 4.2.1, выпущенной 1 сентября 2015 года.[7] это «совместим с Java 6, 7 и 8, с упором на основные усовершенствования и современные веб-возможности».[8]

Spring Framework 4.3 был выпущен 10 июня 2016 года и будет поддерживаться до 2020 года.[9] Это "будет последним поколением в рамках общих системных требований Spring 4 (Java 6+, Servlet 2.5+), [...]".[10]

Объявлено, что Spring 5 будет построен на Реактивные потоки совместимый Reactor Core.[11]

Модули

Spring Framework включает несколько модулей, которые предоставляют ряд услуг:

Инверсия контейнера управления (внедрение зависимостей)

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

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

Объекты можно получить либо с помощью поиска зависимостей, либо с помощью внедрения зависимостей.[13] Поиск зависимостей - это шаблон, при котором вызывающий объект запрашивает у объекта-контейнера объект с определенным именем или определенного типа. Внедрение зависимостей - это шаблон, в котором контейнер передает объекты по имени другим объектам либо через конструкторы, характеристики, или же фабричные методы.

Во многих случаях нет необходимости использовать контейнер при использовании других частей Spring Framework, хотя его использование, вероятно, упростит настройку и настройку приложения. Контейнер Spring предоставляет согласованный механизм настройки приложений и интегрируется практически со всеми средами Java, от небольших приложений до крупных корпоративных приложений.

Контейнер можно превратить в частично податливый EJB (Enterprise JavaBeans) 3.0 контейнер с помощью проекта Вилы. Немного[ВОЗ? ] критиковать Spring Framework за несоответствие стандартам.[14] Однако SpringSource не считает соответствие EJB 3 основной целью и утверждает, что Spring Framework и контейнер позволяют создавать более мощные модели программирования.[15]Программист не создает объект напрямую, но описывает, как они должны быть созданы, определяя его в файле конфигурации Spring. Точно так же напрямую не вызываются сервисы и компоненты; вместо этого файл конфигурации Spring определяет, какие службы и компоненты должны быть вызваны. Этот IoC предназначен для упрощения обслуживания и тестирования.

Фреймворк для аспектно-ориентированного программирования

Spring Framework имеет свой собственный Аспектно-ориентированное программирование (AOP) структура, которая модулирует сквозные задачи в аспекты. Мотивация к созданию отдельной структуры АОП исходит из убеждения, что должно быть возможно предоставить базовые функции АОП без особых сложностей ни в дизайне, ни в реализации, ни в конфигурации. Фреймворк Spring AOP также полностью использует преимущества контейнера Spring.

Фреймворк Spring AOP - это на основе шаблона прокси, и настроен на время выполнения. Это устраняет необходимость в этапе компиляции или переплетении во время загрузки. С другой стороны, перехват позволяет только публичное выполнение метода для существующих объектов в точка соединения.

По сравнению с AspectJ framework Spring AOP менее мощный, но и менее сложный. Spring 1.2 включает поддержку настройки аспектов AspectJ в контейнере. Spring 2.0 добавил больше интеграции с AspectJ; например, Pointcut язык используется повторно и может быть смешан с аспектами, основанными на Spring AOP. Кроме того, Spring 2.0 добавила библиотеку Spring Aspect, которая использует AspectJ для предоставления общих функций Spring, таких как декларативное управление транзакциями и внедрение зависимостей через AspectJ во время компиляции или ткачества во время загрузки. SpringSource также использует AspectJ AOP в других проектах Spring, таких как Spring Roo и Spring Insight, причем Spring Security также предлагает библиотеку аспектов на основе AspectJ.

Spring AOP был разработан, чтобы позволить ему работать с сквозными проблемами внутри Spring Framework. Любой объект, который создается и настраивается контейнером, можно обогатить с помощью Spring AOP.

Spring Framework использует Spring AOP внутри для управления транзакциями, безопасности, удаленного доступа и JMX.

Начиная с версии 2.0 фреймворка Spring предоставляет два подхода к настройке АОП:

  • схематический подход[16] и
  • Стиль аннотаций на основе @ AspectJ.[17]
<бобы 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, Спящий режим, Объекты данных Java (JDO, прекращено с 5.x), Java Persistence API (JPA), Oracle TopLink, Apache OJB, и Apache Cayenne, среди прочего.

Для всех этих поддерживаемых фреймворков Spring предоставляет следующие функции

  • Управление ресурсами - автоматическое получение и освобождение ресурсов базы данных
  • Обработка исключений - перевод исключения, связанного с доступом к данным, в иерархию доступа к данным Spring
  • Участие в транзакции - прозрачное участие в текущих транзакциях
  • Распаковка ресурсов - получение объектов базы данных из оболочек пула соединений
  • Абстракция для двоичный большой объект (BLOB) и персонаж большой объект (CLOB) обработка

Все эти возможности становятся доступными при использовании классы шаблонов предоставляется Spring для каждой поддерживаемой платформы. Критики заявили, что эти классы шаблонов навязчивы и не дают никаких преимуществ перед использованием (например) напрямую Hibernate API.[18][неудачная проверка ] В ответ разработчики Spring сделали возможным прямое использование API Hibernate и JPA. Однако это требует прозрачного управления транзакциями, поскольку код приложения больше не берет на себя ответственность за получение и закрытие ресурсов базы данных и не поддерживает преобразование исключений.

Вместе с управлением транзакциями Spring его структура доступа к данным предлагает гибкую абстракцию для работы со структурами доступа к данным. Spring Framework не предлагает общего API доступа к данным; вместо этого сохраняется вся мощь поддерживаемых API. Spring Framework - единственная платформа, доступная в Java, которая предлагает управляемые среды доступа к данным вне сервера приложений или контейнера.[19]

При использовании Spring для управления транзакциями с Hibernate, возможно, потребуется настроить следующие компоненты:

  • А Источник данных подобно com.mchange.v2.c3p0.ComboPooledDataSource или же org.apache.commons.dbcp.BasicDataSource
  • SessionFactory вроде org.springframework.orm.hibernate3.LocalSessionFactoryBean с атрибутом DataSource
  • Свойства Hibernate, такие как org.springframework.beans.factory.config.PropertiesFactoryBean
  • TransactionManager вроде org.springframework.orm.hibernate3.HibernateTransactionManager с атрибутом SessionFactory

Другие точки настройки включают:

  • Конфигурация точек резания АОП.
  • Семантика транзакции совета АОП[уточнить ].

Управление транзакциями

Платформа управления транзакциями Spring привносит в платформу Java механизм абстракции. Его абстракция способна:

В сравнении, API транзакций Java (JTA) поддерживает только вложенные транзакции и глобальные транзакции и требует сервера приложений (а в некоторых случаях также развертывания приложений на сервере приложений).

Spring Framework предоставляет PlatformTransactionManager для ряда стратегий управления транзакциями:

  • Транзакции, управляемые через соединение JDBC
  • Транзакции, управляемые с помощью объектно-реляционного сопоставления Единицы работы
  • Транзакции, управляемые через JTA TransactionManager и UserTransaction
  • Транзакции управляются на других ресурсах, например объектные базы данных

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

  • Программно, используя Spring TransactionTemplate
  • Конфигурационно, используя метаданные например, аннотации XML или Java (@Transactional и т. д.)

Вместе со структурой доступа к данным Spring, которая объединяет структуру управления транзакциями, можно настроить систему транзакций через конфигурацию, не полагаясь на JTA или EJB. Платформа транзакций также интегрируется с обменом сообщениями и кеширование двигатели.

Фреймворк модель – представление – контроллер

Презентация Spring MVC / Web Reactive от Юргена Хеллера

Spring Framework имеет собственный модель – представление – контроллер (MVC) каркас веб-приложений, что изначально не планировалось. Разработчики Spring решили написать свой собственный веб-фреймворк в ответ на то, что они воспринимали как плохой дизайн (тогда) популярного Jakarta Struts Веб-фреймворк,[20] а также недостатки в других доступных фреймворках. В частности, они чувствовали, что не было достаточного разделения между уровнями представления и обработки запросов, а также между уровнем обработки запросов и моделью.[21]

Как и Struts, Spring MVC - это фреймворк на основе запросов. Структура определяет стратегия интерфейсы для всех обязанностей, которые должны выполняться современной структурой на основе запросов. Цель каждого интерфейса - быть простым и понятным, чтобы пользователям Spring MVC было легко писать свои собственные реализации, если они того пожелают. MVC прокладывает путь для более чистого внешнего кода. Все интерфейсы тесно связаны с Servlet API. Эта тесная связь с API сервлетов рассматривается некоторыми как неспособность разработчиков Spring предложить высокоуровневую абстракцию для веб-приложений.[нужна цитата ]. Тем не менее, это соединение гарантирует, что функции API сервлетов остаются доступными для разработчиков, а также предлагает среду с высокой степенью абстракции для облегчения работы с ней.

Класс DispatcherServlet - это передний контроллер[22] структуры и отвечает за делегирование управления различным интерфейсам на этапах выполнения HTTP-запрос.

Наиболее важные интерфейсы, определенные Spring MVC, и их обязанности перечислены ниже:

  • Контроллер: находится между моделью и представлением для управления входящими запросами и перенаправления на правильный ответ. Контроллер сопоставит HTTP-запрос с соответствующими методами. Он действует как ворота, которые направляют входящую информацию. Он переключается между переходом в модель или вид.
  • HandlerAdapter: выполнение объектов, обрабатывающих входящие запросы
  • HandlerInterceptor: перехват входящих запросов, сравнимый, но не равный фильтрам сервлетов (использование необязательно и не контролируется DispatcherServlet).
  • HandlerMapping: выбор объектов, которые обрабатывают входящие запросы (обработчики) на основе любого атрибута или условия, внутреннего или внешнего по отношению к этим запросам.
  • LocaleResolver: разрешение и, при необходимости, сохранение регион отдельного пользователя
  • MultipartResolver: упростите работу с загрузкой файлов за счет упаковки входящих запросов
  • Просмотр: отвечает за возврат ответа клиенту. Некоторые запросы могут идти прямо к просмотру, не переходя к части модели; другие могут пройти все три.
  • ViewResolver: выбор представления на основе логического имени для представления (использование строго не требуется)

Каждый интерфейс стратегии выше несет важную ответственность в общей структуре. Абстракции, предлагаемые этими интерфейсами, являются мощными, поэтому, чтобы учесть набор вариаций в их реализациях, Spring MVC поставляется с реализациями всех этих интерфейсов и вместе предлагает набор функций поверх Servlet API. Однако разработчики и поставщики могут писать другие реализации. Spring MVC использует Java java.util.Map интерфейс как ориентированная на данные абстракция для модели, где ключи должны быть строковыми значениями.

Простота тестирования реализаций этих интерфейсов кажется одним из важных преимуществ высокого уровня абстракции, предлагаемого Spring MVC. DispatcherServlet тесно связан с инверсией контейнера управления Spring для настройки веб-уровней приложений. Однако веб-приложения могут использовать другие части Spring Framework, включая контейнер, и не использовать Spring MVC.

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

Когда пользователь щелкает ссылку или отправляет форму в своем веб-браузере, запрос отправляется в Spring DispatcherServlet. DispatcherServlet - это фронт-контроллер в Spring MVC. Он обращается к одному или нескольким сопоставлениям обработчиков. DispatcherServlet был выбран в качестве подходящего контроллера и пересылает ему запрос. Контроллер обрабатывает конкретный запрос и генерирует результат. Он известен как Модель. Эта информация должна быть отформатирована в HTML или любой интерфейсной технологии, такой как JSP. Это вид приложения. Вся информация находится в объекте МОДЕЛЬ И ВИД. Когда контроллер не связан с определенным представлением, DispatcherServlet находит фактический JSP с помощью ViewResolver.

Конфигурация DispatcherServlet

DispatcherServlet должен быть настроен в web.xml

<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>

Платформа удаленного доступа

Инфраструктура удаленного доступа Spring - это абстракция для работы с различными RPC (удаленный вызов процедур ), доступные на платформе Java как для подключения клиентов, так и для маршалинга объектов на серверах. Самая важная особенность, предлагаемая этой структурой, - максимально упростить настройку и использование этих технологий за счет сочетания инверсии управления и АОП.

Платформа также обеспечивает восстановление после сбоев (автоматическое переподключение после сбоя подключения) и некоторые оптимизации для использования удаленного EJB на стороне клиента. сессионные компоненты без сохранения состояния.

Spring обеспечивает поддержку этих протоколов и продуктов из коробки.

  • Протоколы на основе HTTP
    • Гессен: протокол двоичной сериализации, открытый код и поддерживаемый CORBA протоколы на основе
    • RMI (1): вызовы методов с использованием инфраструктуры RMI, но специфичной для Spring
    • RMI (2): вызовы методов с использованием интерфейсов RMI, соответствующих обычному использованию RMI
    • RMI-IIOP (CORBA ): вызовы методов с использованием RMI-IIOP / CORBA
  • Корпоративный JavaBean клиентская интеграция
    • Подключение к локальным сессионным компонентам без состояния EJB: подключение к локальным сеансовым компонентам без сохранения состояния
    • Подключение к удаленному сеансу EJB без сохранения состояния: подключение к удаленным сеансовым компонентам без сохранения состояния
  • МЫЛО
    • Интеграция с Ось Apache Фреймворк веб-сервисов

Apache CXF обеспечивает интеграцию со Spring Framework для экспорта объектов в стиле RPC на стороне сервера.

Настройка и клиента, и сервера для всех протоколов и продуктов в стиле RPC, поддерживаемых средой удаленного доступа Spring (за исключением поддержки Apache Axis), настраивается в контейнере Spring Core.

Существует альтернативная реализация с открытым исходным кодом (Cluster4Spring) подсистемы удаленного взаимодействия, включенная в Spring Framework, которая предназначена для поддержки различных схем удаленного взаимодействия (1-1, 1-многие, обнаружение динамических сервисов)…

Быстрая разработка приложений без ограничений

Весенний ботинок

Spring Boot - это весна конвенция над конфигурацией решение для создания автономных приложений на основе Spring производственного уровня, которые можно «просто запустить».[23] Он предварительно настроен с учетом «самоуверенного взгляда» команды Spring на лучшую конфигурацию и использование платформы Spring и сторонних библиотек, поэтому вы можете начать работу с минимальными усилиями. Большинству приложений Spring Boot требуется очень небольшая настройка Spring. Функции:

  • Создавайте автономные приложения Spring
  • Встроить Tomcat или Причал напрямую (не нужно развертывать ВОЙНА файлы)
  • Обеспечьте самоуверенного "стартера" Объектные модели проекта (POM) для упрощения конфигурации Maven
  • Автоматически настраивать Spring, когда это возможно
  • Предоставьте готовые к работе функции, такие как метрики, проверки работоспособности и внешняя конфигурация
  • Абсолютно без генерации кода и без требований к конфигурации XML.

Spring Roo

Spring Roo - это проект сообщества, который обеспечивает альтернативный подход, основанный на генерации кода, при использовании соглашения над конфигурацией для быстрого создания приложений в Ява. В настоящее время он поддерживает Spring Framework, Spring Security и Spring Web Flow. Roo отличается от других быстрая разработка приложений frameworks, сосредоточив внимание на:

  • Расширяемость (через надстройки)
  • Производительность платформы Java (в отличие от других языков)
  • Избежание блокировки (Roo можно удалить в течение нескольких минут из любого приложения)
  • Избегание времени выполнения (с соответствующими преимуществами развертывания)
  • Удобство использования (особенно с помощью функций оболочки и шаблонов использования)

Пакетная структура

Весенняя партия это основа для пакетная обработка который предоставляет функции многократного использования, необходимые для обработки больших объемов записей, в том числе:

  • ведение журнала / отслеживание
  • управление транзакциями
  • статистика обработки вакансий
  • перезапуск задания

Он также предоставляет более продвинутые технические услуги и функции, которые позволят выполнять чрезвычайно большие объемы и высокопроизводительные пакетные задания за счет оптимизации и методов разделения. Spring Batch выполняет ряд заданий; задание состоит из множества шагов, и каждый шаг состоит из задачи READ-PROCESS-WRITE или отдельной операции (тасклета).

Процесс «ЧТЕНИЕ-ПРОЦЕСС-ЗАПИСЬ» состоит из следующих шагов: «чтение» данных из ресурса (значения, разделенные запятыми (CSV), XML или база данных), «обработать» его, а затем «записать» в другие ресурсы (CSV, XML или базу данных). Например, шаг может считывать данные из файла CSV, обрабатывать их и записывать в базу данных. Spring Batch предоставляет множество классов для чтения / записи CSV, XML и базы данных.

Для «одиночной» задачи операции (тасклета) это означает выполнение только одной задачи, например, очистка ресурсов до или после запуска или завершения шага.

Шаги можно объединить в цепочку для выполнения как задания.

Платформа интеграции

Интеграция Spring это основа для Интеграция корпоративных приложений который предоставляет многоразовые функции, необходимые для архитектуры обмена сообщениями или событийно-ориентированной архитектуры.

  • маршрутизаторы - направляет сообщение в канал сообщений в зависимости от условий
  • преобразователи - конвертирует / преобразует / изменяет полезную нагрузку сообщения и создает новое сообщение с преобразованной полезной нагрузкой
  • адаптеры - для интеграции с другими технологиями и системами (HTTP, AMQP (Расширенный протокол очереди сообщений), JMS (Служба сообщений Java), XMPP (Расширяемый протокол обмена сообщениями и присутствия), SMTP (Простой протокол передачи почты), IMAP (Протокол доступа к Интернет-сообщениям), FTP (Протокол передачи файлов), а также FTPS /SFTP, файловые системы и т. д.)
  • фильтры - фильтрует сообщение по критериям. Если критерии не соблюдены, сообщение отбрасывается.
  • активаторы службы - вызывают операцию над объектом службы
  • менеджмент и аудит

Spring Integration поддерживает архитектуры на основе конвейеров и фильтров.

Смотрите также

Рекомендации

  1. ^ «Релизы». Получено 27 ноября 2020.
  2. ^ «Spring Framework 5.3.0-RC2 уже доступен». Получено 14 октября 2020.
  3. ^ Победители Jolt 2006
  4. ^ "Награда за инновации JAX Gewinner 2006". Архивировано из оригинал на 2009-08-17. Получено 2009-08-12.
  5. ^ «Выпущен Spring Framework 3.2.5». Официальный сайт Spring. 7 ноя 2013. Получено 16 октября 2016.
  6. ^ SpringSource.org
  7. ^ Официальный блог Spring
  8. ^ Официальный блог Spring
  9. ^ Блог о весеннем выпуске
  10. ^ Официальный блог Spring
  11. ^ Реактивная пружина
  12. ^ Документация Spring Framework для основного контейнера
  13. ^ В чем разница между depencylookup и внедрением зависимостей - Spring Forum. Forum.springsource.org (28 октября 2009 г.). Проверено 24 ноября 2013.
  14. ^ Весна VS EJB3
  15. ^ "Вилы FAQ". Получено 2006-06-06.
  16. ^ Конфигурация Spring AOP XML
  17. ^ Конфигурация аннотации AspectJ
  18. ^ Гибернация против весны
  19. ^ «Spring Data JPA для абстракции запросов». Получено 2018-02-06.
  20. ^ Введение в Spring Framework
  21. ^ Джонсон, эксперт по проектированию и разработке J2EE один на один, гл. 12. et al.
  22. ^ Паттерны архитектуры корпоративных приложений: Передний Контроллер
  23. ^ Весенний ботинок

Библиография

внешняя ссылка