Jump to content

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

(Перенаправлено из среды Spring )
Весенняя структура
Разработчик(и) VMware
Первоначальный выпуск 1 октября 2002 г .; 21 год назад ( 01.10.2002 )
Стабильная версия
6.1.4 [1]  Отредактируйте это в Викиданных / 15 февраля 2024 г .; 5 месяцев назад ( 15 февраля 2024 г. )
Репозиторий
Написано в Ява
Платформа Java EE
Тип Платформа приложения
Лицензия Лицензия Апач 2.0
Веб-сайт весна .что /проекты /весенний-фреймворк  Edit this on Wikidata

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

<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] Его абстракция способна:

Для сравнения, 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 MVC/Web Reactive, проведенная Юргеном Хёллером

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 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 — это платформа для пакетной обработки , которая предоставляет функции многократного использования, необходимые при обработке больших объемов записей, в том числе:

Он предоставляет более продвинутые технические услуги и функции, которые позволяют выполнять чрезвычайно большие объемы [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]

См. также

[ редактировать ]
  1. ^ «Релиз v6.1.4» .
  2. ^ Jump up to: а б с Дейнум и др. 2014 , с. 47, §2 Основные задачи Spring.
  3. ^ Дейнум и др. 2014 , стр. 694–698, §16-2 Интеграция двух систем с использованием JMS.
  4. ^ Jump up to: а б с д и ж г час я дж к л м н тот п д р с т в v В х и С аа аб и объявление но Джонсон и Хеллер 2004 .
  5. ^ Дейнум и Космина 2021 , с. 1, §1 Настройка локальной среды разработки.
  6. ^ «Выпущена финальная версия Spring Framework 1.0» . Официальный блог Spring Framework . 24 марта 2014 года . Проверено 1 марта 2021 г.
  7. ^ Победители Jolt 2006 г.
  8. ^ «Награда за инновации JAX Gewinner 2006» . Архивировано из оригинала 17 августа 2009 г. Проверено 12 августа 2009 г.
  9. ^ «Выпущена Spring Framework 3.2.5» . Официальный сайт весны . 7 ноября 2013 г. Проверено 16 октября 2016 г.
  10. ^ «Анонс выпуска общедоступной версии Spring Framework 4.0» . Весенний блог. 12 декабря 2013 г.
  11. ^ Стены 2016 , стр. 92–106, §5.
  12. ^ Космина и др. 2017 , стр. 125–126, §4 Подробное описание конфигурации Spring и Spring Boot.
  13. ^ Космина и др. 2017 , стр. 1–18, §1 Знакомство с весной.
  14. ^ «Spring Framework 4.2 выходит в общедоступном виде» . Весенний блог. 31 июля 2015 г.
  15. ^ Jump up to: а б «Spring Framework 4.2 выходит в общедоступном виде» . Весенний блог.
  16. ^ «Версии Spring Framework: поддерживаемые версии» . github.com .
  17. ^ «Реактивная весна» . Весенний блог. 9 февраля 2016 г.
  18. ^ «Spring Framework 6.0 выходит в общедоступном виде» . Весенний блог. 16 ноября 2022 г.
  19. ^ Стены 2019 , с. 48.
  20. ^ Документация Spring Framework для основного контейнера.
  21. ^ Jump up to: а б Джонсон и др. 2005 , Глава §2 — Фабрика компонентов и контекст приложения.
  22. ^ Дейнум и др. 2014 , с. 137, §3-1 Использование Java Config для настройки POJO.
  23. ^ Jump up to: а б Джонсон и Хеллер 2004 , с. 150, Знакомство со Spring Framework — Core Bean Factory.
  24. ^ Jump up to: а б с д и ж г Deinum & Cosmina 2021 , стр. 22–25, §2 Основы Spring Framework — Spring Framework.
  25. ^ Стены 2016 , с. 240, §Приложение D. Зависимости Spring Boot.
  26. ^ Джонсон и др. 2005 , Глава §1. Знакомство со Spring Framework — Краткое описание модуля.
  27. ^ Джонсон и др. 2005 , Глава §4 — Spring и АОП.
  28. ^ Дейнум и др. 2014 , стр. 196–198, §3–17 Введение в АОП для POJO.
  29. ^ Джонсон и др. 2005 г. , Система безопасности Acegi для весны.
  30. ^ Дейнум и др. 2014 , с. 331, §7 Весенняя безопасность.
  31. ^ Стены 2019 , стр. 56–59.
  32. ^ Jump up to: а б с д и ж Дейнум и др. 2014 , стр. 419–426, §10 Доступ к данным.
  33. ^ Дейнум и др. 2014 , стр. 677–681, §15-4. Создание POJO, управляемых сообщениями, в Spring.
  34. ^ Джонсон и др. 2005 , Глава §12 — Web MVC Framework.
  35. ^ Jump up to: а б с Дейнум и др. 2014 , с. 217, §4 Весна @MVC.
  36. ^ Дейнум и др. 2014 , стр. 525–534, §12-3. Написание пользовательских ItemWriter и ItemReader.
  37. ^ Дейнум и др. 2014 , стр. 627–632, §14-7 Предоставление и вызов служб через RMI; §14-8 Предоставление и вызов служб через HTTP.
  38. ^ Дейнум и др. 2014 , стр. 641–658, §14-10 Введение в первые веб-службы SOAP по контракту, §14-11 Предоставление и вызов веб-служб SOAP с помощью Spring-WS, §14-12 Разработка веб-служб SOAP с помощью Spring-WS и маршаллинга XML .
  39. ^ Джонсон и др. 2005 г. , Глава §8 — Упрощенное удаленное взаимодействие.
  40. ^ Jump up to: а б Джонсон и др. 2005 г. , Глава §9 – Вспомогательные услуги.
  41. ^ Дейнум и др. 2014 , с. 475, §11 Управление транзакциями Spring.
  42. ^ Дейнум и др. 2014 , с. 591, §14 Spring Java Enterprise Services и технологии удаленного взаимодействия.
  43. ^ Дейнум и др. 2014 , стр. 737–739, §17-3 Модульное тестирование контроллеров Spring MVC.
  44. ^ Дейнум и др. 2014 , стр. 739–743, §17-4 Управление контекстами приложений в интеграционных тестах.
  45. ^ Мусиб 2022 , с. 358, §8.3 Знакомство с Spring WebFlux.
  46. ^ Космина и др. 2017 , стр. 21-23.
  47. ^ Космина и др. 2017 , стр. 24–25, §2 Доступ к модулям Spring с помощью Maven.
  48. ^ Космина и др. 2017 , с. 26, §2 Доступ к модулям Spring с помощью Gradle.
  49. ^ Jump up to: а б Дейнум и др. 2014 , стр. 53–62, §2-2. Создание POJO путем вызова конструктора.
  50. ^ Jump up to: а б Дейнум и др. 2014 , стр. 48–52, §2-1. Управление и настройка POJO с помощью контейнера Spring IoC.
  51. ^ Дейнум и др. 2014 , стр. 59–67, §2–3. Используйте ссылки POJO, автоматическое подключение и импорт для взаимодействия с другими POJO.
  52. ^ Дейнум и др. 2014 , стр. 112–116, §2–16. Используйте редакторы свойств весной.
  53. ^ Jump up to: а б Walls 2019 , стр. 4–6, §1.1 Начало работы с Spring — Что такое Spring.
  54. ^ Космина и др. 2017 , с. 37, §3 Знакомство с IoC и DI весной.
  55. ^ В чем разница между поиском зависимостей и внедрением зависимостей — Spring Forum . Forum.springsource.org (28 октября 2009 г.). Проверено 24 ноября 2013 г.
  56. ^ Deinum & Cosmina 2021 , стр. 26–32, §2 Основы Spring Framework — внедрение зависимостей.
  57. ^ Jump up to: а б Johnson & Hoeller 2004 , стр. 135–137, §6 Легкие контейнеры и инверсия управления - Контейнеры МОК.
  58. ^ Дейнум и др. 2014 , стр. 145–151, §3–3. Используйте ссылки POJO и автоматическое подключение для взаимодействия с другими POJO.
  59. ^ Jump up to: а б с Космина и др. 2017 , стр. 112–120, §3. Знакомство с IoC и DI весной — автоматическое подключение ваших компонентов.
  60. ^ Jump up to: а б с Дейнум и др. 2014 , стр. 101-1. 151–154, §3-4 Автоматическое связывание POJO с аннотациями @Resource и @Inject.
  61. ^ Дейнум и др. 2014 , стр. 99–104, §2-12 Аспектно-ориентированное программирование.
  62. ^ Jump up to: а б с Дейнум и др. 2014 , стр. 492–494, §11-6 Декларативное управление транзакциями с помощью аннотации @Transactional.
  63. ^ Дейнум и др. 2014 , стр. 509–510, §11–11 Управление транзакциями с помощью плетения во время загрузки.
  64. ^ Spring Конфигурация XML AOP
  65. ^ Конфигурация аннотации AspectJ
  66. ^ Дейнум и др. 2014 , стр. 441–446, §10-5 Обработка исключений в Spring JDBC Framework.
  67. ^ Дейнум и др. 2014 , стр. 426–441, 463–465.
  68. ^ Спящий режим против Spring
  69. ^ Дейнум и др. 2014 , стр. 463–466, §10-8. Сохраняющиеся объекты с помощью шаблонов ORM Spring.
  70. ^ Дейнум и др. 2014 , стр. 446–462, §10-6 Проблемы с прямым использованием фреймворков ORM.
  71. ^ «Spring Data JPA для абстракции запросов» . 6 февраля 2018 года . Проверено 06 февраля 2018 г.
  72. ^ Jump up to: а б Дейнум и др. 2014 , стр. 456–460, §10-7 Настройка фабрик ресурсов ORM весной.
  73. ^ Jump up to: а б с д Дейнум и др. 2014 , стр. 464–468, §11-2 Выбор реализации менеджера транзакций.
  74. ^ Jump up to: а б Дейнум и др. 2014 , стр. 494–499, §11-7 Установка атрибута транзакции распространения.
  75. ^ Дейнум и др. 2014 , стр. 482–484, §11-2 Выбор реализации менеджера транзакций.
  76. ^ Дейнум и др. 2014 , стр. 484–486, §11-3 Программное управление транзакциями с помощью API диспетчера транзакций.
  77. ^ Дейнум и др. 2014 , стр. 486–489, §11-4 Программное управление транзакциями с помощью шаблона транзакции.
  78. ^ Дейнум и др. 2014 , стр. 677–685, §15-4. Создание POJO, управляемых сообщениями, в Spring.
  79. ^ Дейнум и др. 2014 , стр. 685–686, §15-5 Кэшируйте и объединяйте соединения JMS.
  80. ^ Введение в Spring Framework
  81. ^ Джонсон, Эксперт по индивидуальному проектированию и разработке J2EE, гл. 12. и др.
  82. ^ Шаблоны архитектуры корпоративных приложений: фронт-контроллер
  83. ^ Jump up to: а б с д и ж г Дейнум и др. 2014 , стр. 217–232, §4-1 Разработка простого веб-приложения с помощью Spring MVC.
  84. ^ Deinum & Cosmina 2021 , стр. 82–83, §4 Архитектура Spring MVC. Краткое описание обработки запросов.
  85. ^ Дейнум и др. 2014 , стр. 217–219, §4-1 Разработка простого веб-приложения с помощью Spring MVC.
  86. ^ Стены 2019 , стр. 18–19.
  87. ^ Jump up to: а б Дейнум и др. 2014 , стр. 236–239, §4-3 Перехват запросов с помощью перехватчиков-обработчиков.
  88. ^ Дейнум и др. 2014 , стр. 239–240, §4-4 Разрешение пользовательских локалей.
  89. ^ Deinum & Cosmina 2021 , стр. 75–76, §4 Архитектура Spring MVC — подготовка запроса.
  90. ^ Jump up to: а б Дейнум и др. 2014 , стр. 243–247, §4–6 Разрешение представлений по именам.
  91. ^ Дейнум и Космина 2021 , с. 81, §4 Архитектура Spring MVC — визуализация представления.
  92. ^ Дейнум и др. 2014 , стр. 723, §17 Весеннее тестирование.
  93. ^ Jump up to: а б с Deinum & Cosmina 2021 , стр. 73–74, §4 Архитектура Spring MVC — рабочий процесс обработки запросов DispatcherServlet.
  94. ^ Jump up to: а б Стены 2019 , с. 35.
  95. ^ Jump up to: а б с д и ж Deinum & Cosmina 2021 , стр. 84–90, §4 Архитектура Spring MVC — начальная загрузка DispatcherServlet.
  96. ^ Jump up to: а б с Дейнум и др. 2014 , стр. 627–632, §14-7. Предоставление и вызов служб через RMI.
  97. ^ Jump up to: а б Дейнум и др. 2014 , стр. 632–635, §14-8. Предоставление и вызов служб через HTTP.
  98. ^ Дейнум и др. 2014 , стр. 692–694, §16-1 Интеграция одной системы с другой с использованием EAI.
  99. ^ Jump up to: а б Дейнум и др. 2014 , стр. 635–641, §14-9. Открытие и вызов веб-служб SOAP с помощью JAX-WS.
  100. ^ Jump up to: а б Стены 2016 , с. vii, §предисловие.
  101. ^ «Весенний ботинок» . весна.io.
  102. ^ Стены 2016 , с. 48, §2.4.
  103. ^ Deinum & Cosmina 2021 , стр. 21–22, §2 Основы Spring Framework.
  104. ^ Стены 2016 , стр. 37–48, §2.3.
  105. ^ Jump up to: а б Стены 2016 , с. 7, §1.1.3.
  106. ^ Jump up to: а б Стены 2016 , с. х, §Предисловие.
  107. ^ Стены 2016 , стр. 4–5, §1.1.2.
  108. ^ Jump up to: а б Стены 2016 , стр. 124–139, §7.
  109. ^ Стены 2016 , стр. 49–69, §3.1–§3.2.3.
  110. ^ «О Spring Boot» . Проверено 18 марта 2020 г.
  111. ^ Jump up to: а б с Дейнум и др. 2014 , стр. 536–541, §12-7 Управление выполнением шагов.
  112. ^ Дейнум и др. 2014 , стр. 714–717, §16-9 Организация событий с использованием Spring Batch.
  113. ^ Jump up to: а б с Дейнум и др. 2014 , стр. 518–524, §12-2 Чтение и письмо.
  114. ^ Дейнум и др. 2014 , стр. 511–512, §12 Весенняя партия.
  115. ^ Дейнум и др. 2014 , стр. 713–714, §16-8 Условная маршрутизация с помощью маршрутизаторов.
  116. ^ Дейнум и др. 2014 , стр. 704–707, §16-5 Преобразование сообщения из одного типа в другой.
  117. ^ Дейнум и др. 2014 , стр. 686–690, §15-6. Отправка и получение сообщений AMQP с помощью Spring.
  118. ^ Дейнум и др. 2014 , стр. 613–620, §14-4. Отправка электронной почты с помощью поддержки электронной почты Spring.
  119. ^ Дейнум и др. 2014 , с. 406, §9-2 Использование Spring в ваших сервлетах и ​​фильтрах.
  120. ^ Дейнум и др. 2014 , стр. 695–698, §16-2 Интеграция двух систем с использованием JMS.
  121. ^ Дейнум и др. 2014 , стр. 717–722, §16-10 Использование шлюзов.
  122. ^ Jump up to: а б Дейнум и др. 2014 , стр. 710–713, §16-7 Управление интеграцией разветвлений: сплиттеры и агрегаторы.
  123. ^ Jump up to: а б с д Дейнум и Космина 2021 , стр. 101-1. 422–425, §11 Протокол WebSocket.
  124. ^ Деинум и Космина 2021 , стр. 107-1. 425–432, §11 Протокол WebSocket.
  125. ^ Дейнум и Космина 2021 , с. 369, §10 Создание реактивных приложений с помощью Spring WebFlux.
  126. ^ Jump up to: а б Дейнум и Космина 2021 , с. 421, §11 Защита приложений Spring WebFlux.
  127. ^ Весна против EJB3
  128. ^ «Часто задаваемые вопросы о вилах» . Проверено 6 июня 2006 г.
  129. ^ «Spring4Shell: критическая уязвимость в Spring — официальный блог Касперского» .
  130. ^ Чиргвин, Ричард (4 апреля 2022 г.). «VMware возникла из-за уязвимости Spring4shell» . itnews.com.au. Архивировано из оригинала 13 февраля 2024 года . Проверено 13 февраля 2024 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 476f6e6c1e295509b8418b018faa743f__1719210540
URL1:https://arc.ask3.ru/arc/aa/47/3f/476f6e6c1e295509b8418b018faa743f.html
Заголовок, (Title) документа по адресу, URL1:
Spring Framework - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)