Spring Framework

редактировать
Spring Framework
Spring Framework Logo 2018.svg
Разработчик (и) Pivotal Software
Первоначальный выпуск1 октября 2002; 18 лет назад (01.10.2002)
Стабильный выпуск 5.2.7.RELEASE / 9 июня 2020 г.; 4 месяца назад (2020-06-09)
Предварительный выпуск 5.3.0-RC2 / 14 октября 2020 г.; 19 дней назад (2020-10-14)
Репозиторий Spring Repository
Написано наJava
Платформа Java EE
Тип Платформа приложения
Лицензия Лицензия Apache 2.0
Веб-сайтspring.io

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

Содержание

  • 1 История версий
  • 2 Модули
    • 2.1 Инверсия контейнера управления (внедрение зависимостей)
    • 2.2 Аспектно-ориентированная среда программирования
    • 2.3 Данные платформа доступа
    • 2.4 Управление транзакциями
    • 2.5 Модель – представление – среда контроллера
      • 2.5.1 Рабочий процесс Spring MVC
      • 2.5.2 Конфигурация DispatcherServlet
    • 2.6 Структура удаленного доступа
    • 2.7 Соглашение -over-configuration быстрая разработка приложений
      • 2.7.1 Spring Boot
      • 2.7.2 Spring Roo
    • 2.8 Пакетная среда
    • 2.9 Среда интеграции
  • 3 См. также
  • 4 Ссылки
  • 5 Библиография
  • 6 Внешние ссылки

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

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

первая версия была написана Родом Джонсоном, который выпустил фреймворк с публикацией своей книги Expert One-on-One J2EE D esign и разработка в октябре 2002 года. Платформа была впервые выпущена под лицензией Apache 2.0 в июне 2003 года. Первый этапный выпуск, 1.0, был выпущен в марте 2004 года с последующими этапными выпусками в сентябре 2004 и марте 2005 года. Фреймворк Spring 1.2.6 получил награду за продуктивность Jolt и в 2006 году. Spring 2.0 был выпущен в октябре 2006 года, Spring 2.5 - в ноябре 2007 года, Spring 3.0 - в декабре 2009 года, Spring 3.1 - в декабре 2011 года и Spring. 3.2.5 в ноябре 2013 г. Spring Framework 4.0 был выпущен в декабре 2013 г. Заметные улучшения в 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 года. Он «совместим с Java 6, 7 и 8, с упором на об основных усовершенствованиях и современных веб-возможностях ».

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

Spring 5 объявлен быть построенным на Reactive Streams совместимом Reactor Core.

Модули

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

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

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

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

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

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

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

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

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

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

По сравнению со структурой AspectJ 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 предоставляет два подхода к конфигурации AOP:

  • схема подход и стиль аннотаций на основе
  • @ AspectJ.
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 h ttp: //www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd ">

Команда Spring решила не вводить новый AOP -связанная терминология; поэтому в справочной документации Spring и API такие термины, как аспект, точка соединения, advice, pointcut, Introduction, () и weaving имеют те же значения, что и в большинстве других Фреймворки АОП (особенно AspectJ).

Среда доступа к данным

Среда доступа к данным Spring решает общие проблемы, с которыми сталкиваются разработчики при работе с базами данных в приложениях. Поддержка предоставляется для всех популярных платформ доступа к данным в Java: JDBC, iBatis / MyBatis, Hibernate, Java Data Objects (JDO), Java Persistence API (JPA), Oracle TopLink, Apache OJB и Apache Cayenne и другие.

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

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

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

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

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

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

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

  • Конфигурация точек отсечения AOP.
  • Семантика транзакции совета AOP.

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

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

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

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

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

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

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

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

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

Spring MVC / Web Reactive презентация, предоставленная Юргеном Хеллером

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

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

Класс DispatcherServlet является фронт-контроллером фреймворка и отвечает за делегирование управления различным интерфейсам на этапах выполнения 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

MyServletorg.springframework.web.servlet.DispatcherServletMyServlet/

Remote Платформа доступа

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

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

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

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

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

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

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

Быстрая разработка приложений с заменой соглашений на конфигурацию

Spring Boot

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

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

Spring Roo

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

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

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

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

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

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

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

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

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

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

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

  • маршрутизаторы - направляют сообщение в канал сообщений на основе условий
  • преобразователи - конвертируют / преобразуют / изменяют полезную нагрузку сообщения и создают новое сообщение с преобразованной полезной нагрузкой.
  • адаптеры - для интеграции с другие технологии и системы (HTTP, AMQP (Advanced Message Queuing Protocol), JMS (Java Message Service), XMPP (Extensible Messaging and Presence Protocol), SMTP (простой протокол передачи почты), IMAP (протокол доступа к сообщениям в Интернете), FTP (протокол передачи файлов), а также FTPS / SFTP, файловые системы и т. Д.)
  • фильтры - фильтрует сообщение по критериям. Если критерии не соблюдены, сообщение отбрасывается.
  • активаторы служб - вызывают операцию над объектом службы
  • управление и аудит

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

См. Также

  • Портал бесплатного программного обеспечения с открытым исходным кодом
  • значок Портал компьютерного программирования

Ссылки

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

Внешние ссылки

В Wikibook Программирование на Java есть страница по теме: Spring framework
Последняя правка сделана 2021-06-09 03:50:51
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте