Технология Spring Inside: обзор философии дизайна и общей архитектуры

Архитектура Spring

Программисты поклоняются богам технологий, во многом из-за их способности находить и решать проблемы, особенно когда срочные проблемы возникают онлайн, они всегда могут быстро найти и решить их.

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

Я считаю, что все использовали Spring, и некоторые люди понимают его ядро: IOC и AOP, но понимают только их основные концепции, используют отражение и динамический прокси и имеют относительно поверхностное представление о том, как управлять объектами и конкретной реализации прокси.

Некоторые люди используют Spring MVC и используют Spring для интеграции баз данных, транзакций и очередей сообщений для упрощения операций, но их понимание конкретных идей проектирования и реализации интеграции относительно поверхностно.

Я также относительно хорош в этом, поэтому я разберу и обобщу технические принципы, связанные со Spring, в следующий период, взяв за основу книгу «Inside Spring Technology: всесторонний анализ Spring Architecture and Design Principles», в сочетании с моим собственным опытом и вопросами, И статьи Дэниела в Интернете, чтобы восполнить мой недостаток в этом отношении.

Автор этой книги — Цзи Венке.Основываясь на исходном коде Spring, он раскрывает дизайнерские идеи и архитектурные идеи Spring с макро-перспективы, а также анализирует принципы реализации и механизмы работы каждого функционального модуля Spring с микро-перспективы. С одной стороны, я надеюсь, что читатели смогут лучше решать различные проблемы, возникающие в реальной разработке, благодаря глубокому пониманию механизма, лежащего в основе Spring, а с другой стороны, я надеюсь, что читатели смогут усвоить превосходные методы и идеи в дизайне и реализации Spring.

Вся книга состоит из трех частей, в которых подробно рассматриваются ядро, компонент и приложение Spring соответственно. В первой части подробно анализируется реализация IOC-контейнера и АОП, во второй части описывается реализация компонентов Java EE на основе Spring IOC-контейнера и АОП в Spring, а в третьей части описывается реализация некоторых типичных приложений на основе Spring.

В этой статье сначала дается обзор концепции дизайна и общей архитектуры, а также рассматриваются цели проектирования и архитектура Spring в целом.Из этой статьи вы узнаете:

  • Цели весеннего дизайна
  • Общая архитектура Spring
  • Введение в различные подпроекты Spring

Цели дизайна

Короче говоря, цель дизайна Spring — предоставить нам универсальную облегченную платформу для разработки приложений, которая абстрагирует общие проблемы, возникающие при разработке приложений.

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

Облегченность по сравнению с традиционным J2EE. Традиционная разработка J2EE должна полагаться на сервер приложений J2EE, реализованный в соответствии со спецификацией J2EE. При проектировании и реализации необходимо следовать ряду стандартов интерфейса. Приложение влияет на тестируемость и развертывание , а понимание и требования технологии относительно высоки.

Использование Spring для разработки относительно легко для разработчиков и может использовать методы разработки POJO и JavaBean, чтобы сделать приложения ориентированными на разработку интерфейса и полностью поддерживать методы объектно-ориентированного проектирования. Прямая связь уменьшается с помощью контейнера IOC, а функция службы расширяется динамическим и ненавязчивым образом с помощью АОП, что обеспечивает основу для гибкого выбора различных реализаций службы, что также является ядром Spring.

Общие проблемы в процессе разработки, Spring инкапсулирован в различные компоненты, и Spring сформировал открытую экосистему через сообщество.Например, Spring Security является производным от вклада сообщества Acegi.

Общая структура

Как правило, Spring делится на три уровня: нижний уровень — это основной уровень, включающий основные модули, такие как IOC и AOP, средний уровень — это инкапсулированная служба JavaEE в качестве среднего компонента драйвера, а верхний уровень — это каждое приложение.

На следующем рисунке представлена ​​диаграмма архитектуры официального веб-сайта Spring, представляющая его компоненты:

Spring Framework架构图

основной контейнер

Состоит из модулей spring-core, spring-beans, spring-context, spring-context-support и spring-expression:

spring-core и spring-beans обеспечивают основные части инфраструктуры, включая функциональность IOC, BeanFactory — это реализация сложного фабричного шаблона, который отделяет конфигурацию и конкретные зависимости от реальной логики программы.

Модуль контекста основан на модулях ядра и компонентов и добавляет поддержку интернационализации, трансляции событий, загрузки ресурсов и создания контекста.

spring-context-support обеспечивает поддержку общих третьих библиотек, интегрированных в контекст Spring, таких как кэширование (ehcache, guava), связь (javamail), планирование (commonj, кварц), механизмы шаблонов и т. д. (freemarker, скорость).

Модуль spring-expression предоставляет мощный язык выражений для запросов и управления графами объектов во время выполнения Переменные именуются, а объекты извлекаются из контейнера Spring Inversion of Control по имени.

АОП и серверные инструменты

Модуль spring-aop обеспечивает реализацию аспектно-ориентированного программирования, а отдельный модуль spring-aspects обеспечивает интеграцию и применение aspectj.

spring-instrument предоставляет некоторую поддержку инструментов на уровне класса и реализации на уровне ClassLoader для серверов. spring-instrument-tomcat — это инструментальная реализация для tomcat.

компонент сообщения

Платформа Spring 4 включает модуль обмена сообщениями spring, который абстрагирован от проекта интеграции spring, например Message, MessageChannel, MessageHandler и других, для предоставления базовых служб на основе сообщений.

Доступ к данным/интеграция

Уровень доступа к данным и интеграции состоит из модулей JDBC, ORM, OXM, JMS и транзакций.

Модуль spring-jdbc предоставляет абстракцию JDBC, которая устраняет необходимость написания подробного кода JDBC и разрешает коды ошибок, зависящие от поставщика базы данных.

Модуль spring-tx обеспечивает программируемое и декларативное управление транзакциями.

Модуль spring-orm обеспечивает ведущий уровень интеграции API объектно-реляционного сопоставления, такой как JPA, Hibernate и т. д.

Модуль spring-oxm предоставляет уровень абстракции для поддержки реализации сопоставления Object/XML, такого как JAXB, XStream и т. д.

Модуль spring-jms содержит функции создания и потребления сообщений, а встроенный модуль обмена сообщениями Spring предоставляется начиная с Spring 4.1.

Web

Веб-слой состоит из модулей spring-web, spirng-webmvc, spring-websocket и spring-webmvc-portlet.

Модуль spring-web предоставляет основные функции интеграции, ориентированные на веб-разработку, такие как загрузка нескольких файлов, инициализация контейнера IOC с прослушивателями servert и контекстом приложения веб-разработки. Также содержит веб-части HTTP-клиента и поддержку Spring Remote Access.

spring-webmvc содержит веб-приложение, реализованное с помощью Spring Model-View-Controller и веб-сервисов REST.

Модуль spring-webmvc-portlet обеспечивает портлетную реализацию режима MVC.Самая большая разница между протлетами и сервлетами заключается в том, что обработка запросов делится на этапы действия и рендеринга.В запросе этап действия выполняется только один раз, но этап рендеринга может быть связан с просмотром пользователем.Операция устройства выполняется несколько раз.

контрольная работа

Модуль spring-test поддерживает модульное тестирование и интеграционное тестирование, комбинируя Junit или TestNG, обеспечивая непрерывную загрузку ApplicationContext и кэширование этих контекстов.

Введение в каждый подпроект

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

Spring Boot

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

Spring Cloud

Предоставить набор инструментов для разработки распределенных систем на основе Spring Boot, управления конфигурацией, обнаружения служб, прерывателя цепи, интеллектуальной маршрутизации, шины управления, глобальной блокировки, кампании принятия решений, распределенного сеанса, управления состоянием кластера при разработке облачных приложений на основе JVM. Такие операции обеспечивают простой метод разработки с множеством подпроектов под ним:

  • Распределенная/версионная конфигурация: Spring Cloud Config
  • Регистрация и обнаружение службы: Netflix Eureka или Spring Cloud Eureka (вторичная инкапсуляция первой)
  • Маршрутизация: Spring Cloud Zuul, основанный на Netflix Zuul.
  • межсервисный вызов: Spring Cloud Feign
  • Балансировка нагрузки: лента Spring Cloud на основе ленты Netflix
  • Размыкатель цепи: Spring Cloud Hystrix
  • Распределенный обмен сообщениями: Spring Cloud Bus

Spring Cloud Data Flow

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

Spring Cloud Data Flow — это редизайн Spring XD на основе собственного облака, целью которого является упрощение разработки приложений для работы с большими данными. Рефакторинг модулей потоковой обработки и пакетной обработки Spring XD основан на программах потоковой загрузки Spring и задач/пакетных микросервисов соответственно. Эти программы изначально поддерживают современные среды выполнения, такие как Apache YARN, Apache Mesos и Kubernetes, каждая из которых представляет собой модуль автоматизированного развертывания.

Spring Data

Модуль доступа к данным обеспечивает хорошую поддержку JDBC и ORM.С появлением NOSQL и BigData появляется все больше и больше новых технологий, таких как нереляционные базы данных и фреймворки MapReduce, чтобы сделать весенних разработчиков более удобными. новых технологий, с Spring Data, разработчики могут получать доступ к данным, находящимся в различных типах хранилищ данных, относительно согласованным образом, обеспечиваемым Spring.

Spring Data

Spring Integration

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

В Spring Integraton есть несколько основных концепций:

  • Сообщение: объект Java с метаданными;
  • Канал: канал для доставки сообщений;
  • Конечная точка сообщения: сторона обработки сообщения, где сообщение может быть преобразовано, маршрутизировано, отфильтровано, разделено, агрегировано и т. д.;

Вы также можете использовать адаптер канала, с помощью которого приложение взаимодействует с внешним миром.Вход является входящим, а выход – исходящим.Существует множество дополнительных типов подключения, таких как AMQP, JDBC, веб-службы, FTP, JMS, XMPP, различные базы данных NoSQL и т. д. Все это можно связать вместе с помощью простого конфигурационного файла для сложных интеграций.

Spring Batch

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

Например, он предоставляет множество методов для чтения больших файлов (таких как файлы CSV, XML размером 1 ГБ), загрузки или обновления десятков тысяч или даже сотен тысяч записей в базе данных, и если вы напрямую выберете все записи, он перетащит их вниз. всю систему, а с помощью Spring Batch фреймворк поможет ему каждый раз разбивать часть записей на страницы и отправлять их пакетами при их обновлении.

Spring Security

Инструмент проверки подлинности и безопасности Spring. Его предшественник — Acegi, целью которого является предоставление службы безопасности для приложений Spring, такой как аутентификация пользователя, авторизация и т. д.

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

Он очень гибкий и может аутентифицировать пользователей на основе различных хранилищ данных. Он имеет встроенные общие сценарии пользовательского хранилища, такие как in-memory, реляционные базы данных и LDAP, а также может создавать и подключать собственные реализации пользовательского хранилища.

Spring HATEOAS

Давайте сначала разберемся с HATEOAS: все слышали о REST, который позиционируется как архитектурный стиль «распределенного гипермедиа-приложения». В статье упоминается концепция HATEOAS (Hypermedia as the application state engine). Hypermedia — это механизм состояния приложения. то есть в возвращаемом результате предоставляется ссылка для подключения к другим методам API, чтобы пользователь знал, что делать дальше, не проверяя документ.

Например, чтобы получить статью, пример ответа без HATEOAS:

GET /posts/1 HTTP/1.1
Connection: keep-alive
Host: blog.example.com
{
    "id" : 1,
    "body" : "My first blog post",
    "postdate" : "2015-05-30T21:41:12.650Z"
}

Пример ответа HATEOAS:

{
    "id" : 1,
    "body" : "My first blog post",
    "postdate" : "2015-05-30T21:41:12.650Z",
    "links" : [
        {
            "rel" : "self",
            "href" : http://blog.example.com/posts/1,
            "method" : "GET"
        }
    ] 
}

Чтобы упростить такие операции, как регистрация или получение гиперссылок, Spring HATEOAS предоставляет соответствующую поддержку.

Spring Rest DOCS

Можно создавать точные и удобочитаемые документы RESTful Service.Официальные документы Spring создаются с помощью Spring REST Docs.

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

По умолчанию при сборке сначала запускается юнит-тест и генерируется фрагмент документа, а затем при упаковке финальный документ можно сгенерировать, добавив плагин asciidoctor-maven-plugin. стандартизированный процесс разработки, документ будет следовать. Он автоматически обновляется с каждым выпуском версии.

Spring Social

Самым большим преимуществом использования Spring Social является то, что он уже обеспечивает поддержку основных сайтов социальных сетей, требующих лишь простой настройки.Для некоторых менее часто используемых сайтов социальных сетей вы также можете найти соответствующие компоненты от сообщества.

Spring AMQP

Решение для сообщений AMQP, основанное на платформе Spring, предоставляет шаблонный уровень абстракции для отправки и получения сообщений, а также POJO, управляемый сообщениями, что упрощает использование серверов сообщений AMQP в приложениях Spring. Rabbit MQ в SpringSource представляет собой сообщение на основе AMQP с открытым исходным кодом. сервер.

Spring Web Flow

Spring Web Flow — это расширение Spring MVC, поддерживающее разработку приложений на основе процессов. Он отделяет определение процесса от классов и представлений, которые реализуют поведение процесса, одновременно обрабатывает несколько HTTP-запросов, управляет состоянием сеанса, обработкой транзакций данных, поддерживает AJAX для создания богатого клиентского опыта и обеспечивает поддержку JSF.

Spring LDAP

Spring LDAP — это среда Java для управления LDAP. Он основан на шаблоне Spring JdbcTemplate, который может помочь разработчикам упростить операции.

Spring Session

Spring Session предоставляет решение для создания и управления Servlet HttpSessions. Spring Session предоставляет функцию сеанса кластера.По умолчанию внешний Redis используется для хранения данных сеанса, чтобы решить проблему совместного использования сеанса.

Spring Shell

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

Spring Kafka

Spring для kafka инкапсулирует и интегрирует собственный клиент-потребитель kafka.

Spring Statemachine

Его основная функция — помочь разработчикам упростить процесс разработки конечного автомата и сделать структуру конечного автомата более иерархической.

Spring IO Platform

Его можно рассматривать как платформу обслуживания зависимостей, которая объединяет связанные зависимости и предоставляет номер версии для каждой зависимости.

Это в основном для решения проблемы конфликтов версий зависимостей.При использовании Spring часто используются сторонние библиотеки.Как правило, каждый выбирает номер версии или самый последний, исходя из опыта.Направление ветра велико, и легко конфликтовать .

Spring IO Platform очень хорошо решает эти проблемы: когда мы добавляем сторонние зависимости, нам не нужно писать номер версии, он может автоматически помочь нам выбрать оптимальную версию.

Добро пожаловать, чтобы отсканировать QR-код ниже, обратите внимание на мою личную общедоступную учетную запись WeChat и просмотрите другие статьи ~

情情说