Разберитесь с основными пунктами знаний Spring в 2019 году, посмотрите, сколько вы освоили?

Spring

предисловие

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

Обзор весны

Spring — это среда с открытым исходным кодом, созданная для решения сложностей разработки корпоративных приложений (заменяющая более тяжелые корпоративные технологии Java, особенно EJB). конкретного приложения, что значительно повышает эффективность разработки корпоративных приложений.
Spring Framework представляет собой многоуровневую архитектуру, состоящую из 7 четко определенных модулей. Модули Spring построены поверх основного контейнера, который определяет способ создания, настройки и управления bean-компонентами, как показано ниже:
Каждый из модулей, составляющих Spring Framework, может существовать отдельно или быть реализован в сочетании с одним или несколькими другими модулями. Функции каждого модуля следующие:

1. Контейнер с пружинным сердечником:

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

2. Весенний контекст:

Контекст Spring — это файл конфигурации, который предоставляет контекстную информацию для Spring Framework. Предоставляет метод доступа к объекту в стиле фреймворка, что-то вроде регистратора JNDI. Функции пакета Context являются производными от пакета Beans и добавляют поддержку интернационализации (I18N) (например, привязки ресурсов), распространения событий, способа загрузки ресурсов и прозрачного создания контекста, например, через контейнер сервлетов. И контекст Spring, и фабрика компонентов являются реализациями контейнера компонентов.

3. Весенний АОП:

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

4. Весенний ДАО:

Уровень абстракции JDBC DAO обеспечивает осмысленную иерархию исключений, которую можно использовать для управления обработкой исключений и сообщениями об ошибках, создаваемыми различными поставщиками баз данных. Иерархия исключений упрощает обработку ошибок и значительно сокращает объем кода исключений, который необходимо написать (например, открытие и закрытие соединений). Исключения Spring DAO, ориентированные на JDBC, следуют общей иерархии исключений DAO.

5. Весенний ОРМ:

Spring Framework подключается к нескольким платформам ORM для предоставления объектно-реляционных инструментов ORM, включая JDO, Hibernate и iBatis SQL Map. Все это соответствует общей иерархии транзакций и исключений DAO Spring.

6. Весенний веб-модуль:

Модуль веб-контекста основан на модуле контекста приложения и предоставляет контекст для веб-приложений.

7. Фреймворк Spring MVC:

Фреймворк MVC — это полнофункциональная реализация MVC для создания веб-приложений. Благодаря интерфейсу стратегии структура MVC становится гибко настраиваемой, а MVC поддерживает ряд технологий просмотра, включая JSP, Velocity, Tiles, iText и POI.

Основные функции Spring: IOC и AOP

Основная концепция инверсии управления (IOC), также известная как зависимое вмешательство (DI), заключается в следующем: не создавать объекты, а описывать, как их создавать. Не подключайтесь напрямую к объектам и сервисам в коде, а описывайте, какому компоненту какой сервис нужен в конфигурационном файле. Контейнер (в среде Spring контейнер IOC) отвечает за то, чтобы связать это вместе. В типичном сценарии IOC контейнер создает все объекты, устанавливает необходимые свойства, чтобы связать их вместе, и определяет, когда вызываются методы.
Род Джонсон был первым, кто придал большое значение использованию конфигурационных файлов для управления взаимодействием экземпляров Java, и он дал этому методу имя: инверсия управления (IoC). Позже Мартина Фаулер дала этому методу другое название: внедрение зависимостей, так что независимо от того, является ли это внедрением зависимостей или инверсией управления, его значение точно такое же.
Когда объекту Java (вызывающему объекту) необходимо вызвать метод другого объекта Java (зависимого объекта), в традиционном режиме обычно существует два подхода. Оригинальная практика: вызывающая сторона активно создает зависимый объект, а затем вызывает метод зависимого объекта. Простой фабричный шаблон: вызывающий сначала находит фабрику зависимого объекта, затем активно получает зависимый объект через фабрику и, наконец, вызывает метод зависимого объекта.
Обратите внимание на слово active выше, что неизбежно приведет к жестко запрограммированной связи между вызывающим и классом реализации зависимого объекта, что очень неблагоприятно для обслуживания обновлений проекта. После использования среды Spring вызывающей стороне не нужно активно получать зависимый объект.Вызывающей стороне нужно только пассивно принять контейнер Spring для присвоения значений переменным-членам вызывающей стороны.Видно, что после использования Spring вызывающая сторона получает зависимый объект исходным методом.Активное приобретение становится пассивным принятием - поэтому Род Джонсон называет это инверсией управления.
Кроме того, с точки зрения контейнера Spring, контейнер Spring отвечает за назначение зависимого объекта переменным-членам вызывающей стороны, что эквивалентно внедрению своего зависимого экземпляра для вызывающей стороны, поэтому Мартин Фаулер называет это внедрением зависимостей.
АОП (аспектно-ориентированное программирование) также является аспектно-ориентированным программированием, которое в качестве дополнения к объектно-ориентированному программированию стало относительно зрелым методом программирования. На самом деле, АОП уже давно не существует, АОП и ООП дополняют друг друга, а аспектно-ориентированное программирование разбивает процесс выполнения программы на различные аспекты.
АОП специально используется для решения проблем перекрестных проблем, распределенных по различным модулям (разным методам) в системе.В приложениях JavaEE АОП часто используется для работы с некоторыми службами системного уровня со сквозными свойствами, такими как ведение журнала, управление транзакциями, проверка безопасности, кэширование, управление пулом объектов и т. д., АОП стал очень распространенным решением.
В типичном объектно-ориентированном стиле разработки операторы ведения журнала могут быть реализованы во всех методах и классах Java для реализации функций ведения журнала. В АОП-подходе службы ведения журнала могут быть модульными, в свою очередь, и декларативно применяться к компонентам, требующим ведения журнала, так что классам Java не нужно знать о существовании служб ведения журнала, а также им не нужно думать о связанном коде. Таким образом, код приложения, написанный с помощью Spring AOP, слабо связан.

Краткое изложение преимуществ весны

1. Низкий уровень интрузивности, чрезвычайно низкое загрязнение кода:

Многие фреймворки привязывают приложения к фреймворкам, заставляя приложения наследовать их классы или реализовывать их интерфейсы, в то время как Spring сочетает специфичные для Spring аннотации с общими pojos. Ненавязчивая модель программирования Spring означает, что этот класс может играть одну и ту же роль как в Spring, так и в других приложениях. Компоненты Spring — это обычные Java Bean-компоненты, благодаря чему модульные тесты больше не зависят от контейнера и их легче писать.

2. Используйте шаблоны, чтобы избавиться от стандартного кода:

Например, Spring JdbcTemplate позволяет избежать традиционного шаблонного кода JDBC (создать соединение с базой данных, затем создать объект оператора и, наконец, вы можете запросить, закрыть соединение с базой данных, оператор и набор результатов) при выполнении операций с базой данных.

3. Независимость от различных серверов приложений:

Приложения, основанные на инфраструктуре Spring, могут по-настоящему реализовать обещание «Написать один раз и запустить где угодно».

4. Контейнер Spring IoC упрощает замену бизнес-объектов и уменьшает связь между компонентами:

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

5. Поддержка Spring AOP позволяет централизованно управлять общими задачами, такими как безопасность, транзакции, ведение журнала и т. д .:

Разделите основной бизнес и системные службы, сохраните простоту и связность POJO, чтобы обеспечить лучшее повторное использование.

6. Spring ORM и DAO обеспечивают хорошую интеграцию со сторонними платформами уровня сохраняемости и упрощают доступ к базовой базе данных:

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

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

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

Spring MVC

Spring MVC — это базовая веб-инфраструктура в Spring, основанная на шаблоне Модель-Представление-Контроллер (Model-View-Controller, MVC), она может помочь вам создавать гибкие и слабо связанные веб-приложения, такие как среда Spring. В этой структуре веб-запрос можно грубо разделить на несколько шагов, как показано на рисунке ниже, которые разделяют обязанности и делают код гибким и удобным в сопровождении.

Чтобы использовать фреймворк, мы сначала настраиваем DispatchServlet, который является передним контроллером, затем включаем Spring MVC и пишем контроллеры, представления, модели и многое другое. Среди них DispatcherServlet является ядром Spring MVC.Когда DispatcherServlet запускается, он создает контекст приложения Spring и загружает bean-компоненты, объявленные в файле конфигурации или классе конфигурации, или автоматически сканируемые bean-компоненты, но в веб-приложениях Spring обычно есть и другие контекст приложения, этот контекст приложения создается ContextLoaderListener. DispatcherServlet загружает bean-компоненты, содержащие веб-компоненты, такие как контроллеры, преобразователи представлений и сопоставления обработчиков, в то время как ContextLoaderListener загружает другие bean-компоненты в приложении, обычно компоненты среднего уровня и уровня данных, которые управляют серверной частью приложения.
Spring MVC — это мощная и гибкая веб-инфраструктура. С помощью аннотаций Spring MVC предоставляет модель разработки, аналогичную POJO, что упрощает разработку контроллеров, обрабатывающих запросы, а также упрощает их тестирование. И Spring MVC также поддерживает различные преобразователи представлений, такие как JSP, Tiles, Thymeleaf, что делает внешний интерфейс более мощным и простым в написании.

Spring Web Flow

Spring Web Flow — это расширение Spring MVC, обеспечивающее поддержку диалоговых веб-приложений на основе потока (функции корзины покупок или мастера). Короче говоря, это структура процесса, которая проводит пользователей через серию шагов мастера.
В Spring Web Flow процесс определяется тремя основными элементами: состоянием, переходами и данными процесса. Состояние (State) это место, где происходит событие в процессе.В процессе происходит его переход из одного состояния в другое состояние.Текущее состояние процесса называется данными процесса.
Статус делится на:
1. Действие Состояние действия — это состояние, в котором происходит логика процесса.
2. Решение Состояние принятия решения делит процесс на два направления, которые будут определять направление процесса на основе результатов оценки данных процесса.
3. Конец (End) Конечным состоянием является последняя остановка процесса. После входа в состояние End процесс завершается.
4. Подпоток. Состояние подпроцесса запускает новый процесс в контексте текущего процесса.
5. Просмотр Состояние просмотра приостанавливает процесс и приглашает пользователя принять участие в процессе.
Переходы соединяют состояния в процессе. Для каждого состояния в процессе, кроме конечного состояния, требуется по крайней мере один переход, чтобы вы знали, куда движется процесс после завершения этого состояния. Состояние может иметь несколько переходов, соответствующих различным путям, которые могут быть выполнены, когда текущее состояние заканчивается.
Когда процесс переходит из одного состояния в другое, он уносит с собой некоторые данные процесса. Иногда эти данные нужны только в течение короткого периода времени (возможно, пока страница отображается пользователю). Иногда эти данные передаются на протяжении всего процесса и используются в конце процесса.
Spring Web Flow может создать веб-фреймворк для диалоговых приложений, и это хорошо, но использование xml для его конфигурации кажется неразумным, особенно при наличии множества bean-компонентов или узлов процессов, которые нелегко поддерживать.

Spring Security

Безопасность является очень важным аспектом для многих приложений, потому что безопасность — это проблема, выходящая за рамки функциональности приложения, и большая часть прикладной системы не должна участвовать в собственной обработке безопасности. Хотя мы можем написать код, относящийся к функциям безопасности, непосредственно в приложении, лучше отделить проблемы, связанные с безопасностью, от проблем самого приложения как аспекта системы. Spring Security реализует безопасность приложений с помощью AOP и Filter.
Защитите веб-запросы и ограничьте доступ на уровне URL-адресов с помощью фильтров из спецификации сервлета. Spring Security также может защищать вызовы методов с помощью Spring AOP — с помощью проксирования объектов и рекомендаций по использованию можно гарантировать, что только пользователи с соответствующими привилегиями могут получить доступ к защищенным методам.
Spring Security очень гибок и может аутентифицировать пользователей на основе различных хранилищ данных. Он имеет встроенные общие сценарии хранения пользователей, такие как in-memory, реляционные базы данных и LDAP. Но мы также можем написать и подключить собственные реализации хранилища пользователей.
При отображении содержимого HTML для браузера может потребоваться, чтобы представление отражало ограничения безопасности и соответствующую информацию. Простым примером является отображение основной информации о пользователе (например, отображение «Вы вошли в систему как...»). Или вы хотите условно отображать определенные элементы представления на основе разрешений, предоставленных пользователю. Сам Spring Security предоставляет библиотеку тегов JSP, а Thymeleaf интегрируется с Spring Security через определенный диалект. С их помощью можно легко обеспечить защиту зрения.

Spring Data

Spring Data призван упростить построение технологий доступа к данным на основе приложений Spring Framework, включая реляционные базы данных, NoSQL, инфраструктуры Map-Reduce, облачные службы данных и т. д., и направлен на предоставление общей и унифицированной модели кодирования (но не той же code. ), что упрощает использование любой базы данных с Spring.
Как один из родительских проектов Spring Source, Spring Data направлен на унификацию и упрощение различных типов постоянного хранилища, независимо от того, является ли это реляционной базой данных или хранилищем данных NoSQL.

Текущие данные Spring включают следующие модули (или подпроекты):
  • Spring Data Commons
  • Spring Data JPA
  • Spring Data KeyValue
  • Spring Data LDAP
  • Spring Data MongoDB
  • Spring Data Gemfire
  • Spring Data REST
  • Spring Data Redis
  • Spring Data for Apache Cassandra
  • Spring Data for Apache Solr
  • Spring Data Couchbase (community module)
  • Spring Data Elasticsearch (community module)
  • Spring Data Neo4j (community module)
Независимо от того, какое постоянное хранилище, объекты доступа к данным (DAO, то есть объекты доступа к данным) обычно предоставляют операции CRUD (создание, чтение, обновление, удаление), методы запросов, методы сортировки и разбиения по страницам для одного объекта домена. Spring Data предоставляет унифицированный интерфейс на основе этих уровней (CrudRepository, PagingAndSortingRepository) и реализации постоянного хранилища.
Возможно, вы использовали один из объектов модели Spring, например JdbcTemplate, для написания реализации объекта доступа. Но в объектах доступа к данным на основе данных Spring нам нужно только определить и написать некоторые интерфейсы методов запросов (на основе разных постоянных хранилищ определения могут немного отличаться), и Spring Data сгенерирует правильную реализацию во время выполнения.
Все подпроекты Spring Data поддерживают:
  • Шаблон: обработка распределения ресурсов и обработка исключений
  • Объект, сопоставление хранилища данных: например, ORM
  • Поддержка объектов доступа к данным: помогите нам написать некоторые шаблонные операторы, такие как сортировка по страницам.
Однако некоторые подпроекты Spring Data, такие как Spring Data Redis и Spring Data Riak, предоставляют только шаблоны, поскольку соответствующие хранилища данных поддерживают только неструктурированные данные и не подходят для сопоставления объектов и запросов.

Spring Boot

Spring родился как облегченная альтернатива Java Enterprise Edition (Java Enterprise Edition, JEE, также известная как J2EE). Вместо разработки тяжеловесных Enterprise JavaBeans (EJB) Spring предлагает относительно простой подход к корпоративной Java-разработке.
В то время как код компонента Spring является легковесным, его конфигурация тяжеловесна. В начале Spring использовал XML-конфигурацию, и это было много XML-конфигураций, Даже если позже были улучшения, основанные на аннотациях, мы все равно не могли избежать тисков множества конфигураций. И Spring Boot делает все это в прошлом.Если цель Spring — упростить разработку программ, то Spring Boot — упростить разработку самого Spring.
Spring Boot использует технологию автоматической настройки для удаления шаблонной конфигурации в приложениях Spring, чтобы мы могли избежать многих проблем с настройкой и больше сосредоточиться на бизнес-функциях. Spring Boot также предоставляет ряд проектов Starter, которые можно использовать сразу, что значительно упрощает задачу программирования.
Он предоставляет четыре основные функции, которые могут изменить способ разработки приложений Spring:
1. Spring Boot Starter: он объединяет часто используемые группы зависимостей и объединяет их в одну зависимость, чтобы ее можно было добавить в сборку проекта Maven или Gradle за один раз, и все текущие начальные проекты можно найти здесь.
2. Автоконфигурация: функция автоконфигурации Spring Boot использует поддержку условной конфигурации Spring 4, чтобы разумно угадывать bean-компоненты, необходимые приложению, и автоматически настраивать их, уменьшая объем конфигурации, которую вам нужно настроить самостоятельно.
3. Интерфейс командной строки (CLI). Интерфейс командной строки Spring Boot использует преимущества языка программирования Groovy в сочетании с автоматической настройкой для дальнейшего упрощения разработки приложений Spring.
4. Актуатор: он добавляет определенные функции управления в приложения Spring Boot.

Spring Cloud

Прежде чем перейти к теме, давайте сначала посмотрим на микросервисы. Короче говоря, это разделение исходной единой независимой большой системы на несколько распределенных небольших служб. Эти небольшие службы работают независимо и взаимодействуют через HTTP и RestFul API.
Микросервис обычно выполняет определенную функцию, например управление заказами, управление клиентами и т. д. Каждый микросервис — это крошечное шестиугольное приложение со своей бизнес-логикой и адаптерами. Некоторые микрослужбы также публикуют API для использования другими микрослужбами и клиентами приложений. Другие микросервисы дополняют веб-интерфейс. Во время выполнения каждый экземпляр может быть облачной виртуальной машиной или контейнером Docker.
Микрослужбы обладают характеристиками распределенных систем, такими как обнаружение служб, балансировка нагрузки, отработка отказа, многоверсионность, обновление в оттенках серого, снижение качества службы и распределенная трассировка.
Spring Cloud представляет собой полный набор распределенных системных решений.Его подпроекты охватывают все основные программные средства (включая управление конфигурацией, управление услугами, интеллектуальную маршрутизацию, глобальные блокировки и т. д.), необходимые для реализации распределенных систем. Основанный на Spring Boot, Spring Boot может стать микрослужбой в Spring Cloud с меньшей конфигурацией.Разработчики, использующие Spring Cloud, могут быстро запускать службы или создавать приложения, а также быстро подключаться к ресурсам облачной платформы, что делает разработку чрезвычайно простой.
Spring Cloud фокусируется на типичных случаях использования и охвате механизма расширения для хорошего готового опыта:
  • Распределенная/версионная конфигурация: 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 собраны более чем на 20 страницах в формате pdf, которыми мы поделились с вами сегодня. Прошу всех обратить внимание на мой официальный аккаунт [Программист в погоне за ветром], в нем будут обновляться статьи, а также размещаться отсортированная информация.

В конце концов

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