JavaRush /Java Blog /Random-TL /Ano ang kailangan mong malaman tungkol sa Spring: kasaysa...

Ano ang kailangan mong malaman tungkol sa Spring: kasaysayan, mga pangunahing module, paghahambing sa Java EE

Nai-publish sa grupo
Kamusta! Sa ngayon, ang pinakasikat na direksyon ng development para sa isang developer na may kaalaman sa Java ay ang web development. Siyempre, para sa espesyalidad na ito mayroong isang listahan ng mga teknolohiya na kinakailangan upang pag-aralan. Isa sa mga pangunahing ay Spring . Maaari kang magtaltalan na maaari mong matutunan ang Java EEWhat нужно знать о Spring: история появления, ключевые модули, сравнение с Java EE - 1 sa halip . Siyempre, totoo ito, ngunit ngayon ang karamihan sa mga bagong proyekto ay gumagamit ng Spring , na ginawa itong halos default, mandatoryong teknolohiya para sa isang Java web developer. At kung gusto mong makasabay sa mga pangangailangan ng merkado, kailangan mong pag-aralan ito. Ngayon gusto kong pag-usapan ang Spring , ibig sabihin, palawakin ang iyong pananaw tungkol dito nang kaunti: pag-usapan ang kasaysayan ng paglikha nito, mga pangunahing pagkakaiba mula sa Java EE stack at magbigay ng maikling pangkalahatang-ideya ng mga pangunahing bahagi ng Spring stack. Magsimula na tayo! What нужно знать о Spring: история появления, ключевые модули, сравнение с Java EE - 2

1. Paano at kailan lumitaw ang Spring at kung ano ang naging evolve nito sa paglipas ng panahon

Вcе началось в октябре 2002 года, когда Род Джонсон написал книгу “Expert One-onOne J2EE Design and Development”: What нужно знать о Spring: история появления, ключевые модули, сравнение с Java EE - 3В этой книге, опубликованной издательством Wrox, автор описывает состояние разработки корпоративных приложений Java в то время и указывает на ряд недостатков Java EE и компонентной среды EJB (Enterprise Java Bean). Одновременно с этим, Род Джонсон предлагает более простое решение, основанное на обычных Java-классах (POJO — простые старые Java-an objectы) и внедрении зависимостей. В книге он объясняет, How можно создать высококачественное масштабируемое приложение для онлайн-бронирования мест без использования EJB. Т.е. он наглядно продемонстрировал, How устранить сложности разработки приложений и сделать возможным использование простых компонентов JavaBean, чтобы добиться всего, что ранее было возможным только с использованием EJB. Однако область применения Spring не ограничивается разработкой программных компонентов, выполняющихся на стороне serverа. Любое Java-приложение может использовать преимущества фреймворка в плане простоты, тестируемости и слабой связанности. Приведенный им дизайн разработки J2EE мгновенно стал хитом. Большая часть codeа applications, бесплатно предоставленного How часть книги, можно было многократно использовать, и вскоре ряд разработчиков начали использовать его в своих проектах. У Wrox была веб-page для книги с исходным codeом и исправлениями. Также предоставor и онлайн-форум для книги. В феврале 2003 года разработчики Юрген Хеллер и Янн Карофф убедor Рода Джонсона создать проект с открытым исходным codeом на основе codeа приведенной инфраструктуры. С того момента Род, Юрген и Янн начали своё сотрудничество над созданием чего-то совершенно нового. Собственно, именно Янн Карофф и придумал название «Spring» для нового фреймворка. Тут имелось ввиду, что Spring — How весна: новый старт после «зимы» традиционного J2EE.
  • В июне 2003 года Spring 0.9 выпустor под лицензией Apache 2.0.
  • В марте 2004 года выходит Spring 1.0. Интересно, что даже до выпуска Spring 1.0, предыдущую версию 0.9 очень тепло восприняли, и она получила широкое распространение.
  • В августе 2004 года Род Джонсон, Юрген Хеллер, Кейт Дональд и Колин Сампалеану стали соучредителями interface21 — компании, которая занимается консультированием, обучением и поддержкой по Spring.
  • Октябрь 2006 года: выходит version Spring 2.0, которая упростила файлы конфигурации XML.
  • В Spring 2.5, появившейся в ноябре 2007 года, были представлены конфигурации аннотаций.
  • Spring 3.2, вышедшая в декабре 2012 года, представила конфигурацию Java, поддерживала Java 7, Hibernate 4, Servlet 3.0, а также требовала How минимум Java 1.5.
  • Янн Карофф покинул команду в самом начале. Род Джонсон покинул “весеннюю” команду в 2012 году. Юрген Хеллер по-прежнему является активным членом команды разработчиков Spring.
  • В Spring 4.0, вышедшая в 2014 году, добавor поддержку Java 8.
  • Также в 2014 году миру представor Spring Boot.
  • Spring 5.0 вышла в 2017 году. Как и Spring Boot 2.x, который поддерживает Spring 5.
  • Собственно, таким образом наш любимый фреймворк и стал таким, Howим мы знаем его сейчас.

2. Spring vs Java EE

Проведём небольшое сравнение двух ключевых стеков Java веб-разработчика: Spring и Java EE. What нужно знать о Spring: история появления, ключевые модули, сравнение с Java EE - 4
Java EE
Преимущества Недостатки
  • Приложения, написанные на Java EE, считаются более надежными, безопасными и масштабируемыми
  • Java EE — утвержденный промышленностью стандарт API
  • Преимущественно основан на annotationх и CDI (context and dependency injection), How впрочем и Spring
  • Реализация на основе EJB контейнеров и POJO
  • Сложные applications с большим количеством транзакций очень хорошо обрабатываются JEE
  • Успешен в использовании для масштабируемого монолитного applications
  • У Java EE есть свой ООП язык, содержащий определенный стиль и синтаксис
  • Очень сложная среда разработки приложений, которую сложно понять новичкам (и старичкам порой тоже)
  • Окончательная стоимость проекта, включая разработку, развертывание и разработку приложений, может оказаться непомерно высокой
Java EE, имеющий лицензию Oracle, предназначен для организаций и компаний, которым требуется широкая адаптируемая распространяемая среда для создания массовых приложений. Как и Spring, Java EE включает дополнительные библиотеки для доступа к базе данных (JDBC, JPA), вызова удаленной техники (RMI), информирования (JMS), веб-администрирования, обработки XML и характеризует стандартные API-интерфейсы для корпоративных JavaBeans, портлетов, сервлетов, страниц serverа Java и т. д. What нужно знать о Spring: история появления, ключевые модули, сравнение с Java EE - 5Фундаментальная цель Java EE состоит в том, чтобы распутать основные проблемы, с которыми сталкиваются разработчики в отношении построения текущих приложений с помощью различных API. В это же время разработка на Java EE обладает высоким уровнем сложности, что задирает непомерно высокую планку не только для новичков. Да и опытным специалистам бывает сложно понять уже написанный функционал, поэтому разработка на Java EE более долгая и, соответственно, более дорогостоящая. Про Java EE в двух словах можно сказать так: Сложно, но гибко. Ну а теперь давайте поговорим немного о Spring-е. What нужно знать о Spring: история появления, ключевые модули, сравнение с Java EE - 6
Spring
Преимущества Недостатки
  • Позволяет эффективно организовывать взаимодействия an objectов
  • Более прост, нежели Java EE
  • Реализован на основе IOC и AOP, что обеспечивает слабую связанность приложений
  • Работает на основе конфигурации XML, Groovy or аннотаций
  • Позволяет использовать простые старые an objectы Java — POJO, разработчикам не нужен корпоративный контейнер, такой How server приложений
  • Обеспечивает разработчикам Java высокий уровень модульности
  • Предоставляет реализацию библиотек Java EE, но на свой лад, благодаря чему использование их станет в разы проще
  • Лицензия с открытым исходным codeом
  • Spring Boot сильно упрощает первичную настройку applications
  • Код applications Spring, How правило, прост для тестирования
  • Относительно сложно развивать Spring, поскольку в нем отсутствует четкая направленность
  • Для начинающего разработчика Java изучение среды Spring может быть сложной задачей (но все равно проще, чем Java EE)
  • Spring медленнее, чем Java EE
Spring — это система с открытым исходным codeом для Java для крупного бизнеса. Структура Spring нацелена на то, чтобы предоставить максимально простую реализацию идей J2EE и использовать отличную практику программирования за счет расширения возможностей модели программирования на основе POJO. Т.е. Java EE — скорее официальный стандарт, в то время How Spring — это скорее фреймворк, реализующий по-своему данный стандарт.

Итоги сравнения

В моём понимании Java EE и Spring — это How JDBC и Hibernate, где JDBC — более быстрая технология, но в то же время с большим количеством лишнего codeа. А Hibernate уже использует JDBC, но при этом упрощая и сокращая разработку в разы (хоть и накладывая некоторые ограничения). Нельзя однозначно сказать, кто из них лучше. Также это чем-то напоминает вопрос: что лучше — ArrayList or LinkedList. Ведь ответ будет всё тем же — смотря в Howой ситуации. У каждого из них есть свои сильные и слабые стороны, и выбирать из них нужно тщательно, взвесив свою ситуацию и поняв, кто из них сейчас принесет наибольшую пользу. What нужно знать о Spring: история появления, ключевые модули, сравнение с Java EE - 7

3. Компоненты Spring

Ну а сейчас давайте немного поговорим о фреймворках, из которых состоит Spring.

Spring framework

Это основной модуль, который предоставляет комплексную модель программирования и конфигурации для современных корпоративных приложений на основе Java — на любой платформе развертывания. Он содержит множество основных (базовых) технологий Spring:
  • core — базовый функционал, реализующий понятия IoC (inversion of control) и DI (dependency injection);
  • AOPAspect-Oriented Programming — аспектно-ориентированое программирование, направленное на реализацию сквозной логики;
  • MVC и WebFlux — фреймворки для веб взаимодествия;
  • JDBC, ORM — технологии взаимодействия с базами данных;
  • Test — функционал для прозрачного, несложного тестирования данных Spring контейнера;
  • SpEL — Spring Expression Language — язык выражений Spring;
  • и т.д.

Spring Boot

Упрощает создание приложений на основе Spring, сокращая до минимума первичную настройку applications и автоконфигурирует элементы applications на Spring. Пример запуска Spring boot за 5 minutes

Spring Data

Значительно упрощает использование технологий доступа к данным, реляционных и нереляционных баз данных (убирает повторяющийся code и упрощает взаимодействие с данными). В этой статье — неплохой туториал по подключению Spring Data.

Spring Cloud

Используется в микросервисной архитектуре, упрощая взаимодействие микросервисов между собой и автоматизируя развертывание приложений на облачных платформах типа AWS, Azure и т.д. Развёрнутый туториал по Spring Cloud смотрите здесь, но предупрежу, что данная тема не из легких и ориентирована на специалистов уровня, близкого к синьору.

Spring Security

Предоставляет мощный и настраиваемый инструмент проверки подлинности (аутентификации) и контроля доступа (авторизации) в приложение. Несложный пример подключения Spring Security к своему приложению вы можете найти в этом посте. What нужно знать о Spring: история появления, ключевые модули, сравнение с Java EE - 8

Spring GraphQL

Данный модуль обеспечивает поддержку приложений Spring, построенных на GraphQL Java. GraphQL — это язык requestов для API, позволяющий клиентам запрашивать ограниченное множество данных, в которых они нуждаются, что в свою очередь позволяет собирать данные в ограниченном количестве requestов. Если вы уже знакомы с JPA, возможно уже встречали EntityGraph, со схожей (or той же) концепцией. Подробнее о GraphQL можно почитать вот тут.

Spring Session

Данная часть фреймворка Spring предоставляет API и реализации для управления информацией о сеансе пользователя (данные сеанса пользователя сохраняются в постоянном хранorще вроде Redis, MongoDb, HazelCast и т. д). С примером использования Spring Session можно ознакомиться вот тут.

Spring Integration

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

Spring REST

Предоставляет богатый набор инструментов, упрощающий разработку REST API: инструменты для маршрутизации requestов, для преобразования JSON/XML в an objectы требуемых типов и т.д. Пример RESTful сервиса на Spring можно найти в этом материале.

Spring Web Flow

Spring Web Flow основан на Spring MVC и позволяет реализовать «потоки» веб-applications. Такие потоки инкапсулируют последовательность шагов, которые направляют пользователя через выполнение некоторой бизнес-задачи. Они охватывают несколько HTTP-requestов, имеют состояние, работают с транзакционными данными, могут использоваться повторно и могут быть динамическим и долговременным по своей природе. Пример подключения Spring Web Flow можно рассмотреть в этом гайде на английском.

Spring WebServices

Данный модуль призван облегчить разработку сервисов SOAP на основе контрактов, позволяя создавать гибкие веб-сервисы, используя один из многих способов манипулирования полезными нагрузками XML. SOAP — Simple Object Access Protocol — Простой протокол доступа к an objectм.

Spring HATEOAS

Модуль предоставляет некоторые API-интерфейсы для упрощения создания REST контроллеров, которые следуют принципу HATEOAS при работе со Spring и особенно Spring MVC. HATEOAS — Hypermedia As The Engine Of Application State — Гипермедиа How двигатель состояния applications. Использование данной библиотеки Spring вы можете увидеть здесь.

Spring Batch

Данный модуль предоставляет функционал для пакетных обработок данных (когда данные обрабатываются большими кусками — пакетами), жизненно важных для повседневной работы корпоративных систем. В Spring Batch предоставлены функции многократного использования, которые необходимы для обработки больших объемов записей, включая ведение журнала / трассировку, управление транзакциями, статистику обработки заданий, перезапуск заданий, пропуск и управление ресурсами. Интересный обзор по Spring Batch вы можете найти по этой ссылке.

Spring AMQP

Модуль применяет основные концепции Spring к разработке решений обмена messagesми на основе AMQP. Он предоставляет шаблон (template) How высокоуровневую абстракцию для отправки и получения сообщений. Также обеспечивается поддержка POJO, управляемых messagesми, с контейнером слушателя (listener container). AMQP — Advanced Message Queueing Protocol — Расширенный протокол очереди сообщений. Проект содержит две части: spring-amqp — это базовая абстракция, а spring-rabbit — это реализация для RabbitMQ. Пример с подключением RabbitMQ с использованием Spring What нужно знать о Spring: история появления, ключевые модули, сравнение с Java EE - 9

Spring for Apache Kafka

Данный проект применяет основные концепции Spring к разработке решений для обмена messagesми на основе Kafka. Предоставляется шаблон (template) How высокоуровневая абстракция для отправки сообщений. Также обеспечивается поддержка an objectов POJO, управляемых messagesми, с необходимыми annotationми и контейнером слушателя (listener container). Тут явно просматривается схожесть со Spring AMQP, но даный модуль адаптирован конкретно под Kafka. Пример подключения Spring Kafka можно подсмотреть вот тут.

Spring CredHub

Предоставляет поддержку на стороне клиента для хранения, получения и удаления учетных данных с serverа CredHub, работающего на платформе Cloud Foundry. CredHub — предоставляет API для безопасного хранения, создания, извлечения и удаления учетных данных различных типов. Spring CredHub предоставляет привязку Java для CredHub API, что упрощает интеграцию приложений Spring с CredHub.

Spring FLO

Это библиотека JavaScript, которая предлагает простой встраиваемый визуальный конструктор HTML5 для конвейеров и простых графиков для мониторинга потоковой и пакетной передачи данных. Демо данной технологии — в видео по ссылке.

Spring LDAP

Данная библиотека упрощает операции по протоколу LDAP и основана на шаблоне Spring JdbcTemplate. Фреймворк позволяет осуществлять поиск и закрытие контекста, просмотр результатов, codeирование/деcodeирование значений, фильтры и многое другое (построенная на тех же принципах, что и Spring Jdbc) Пример реализации Spring LDAP можно найти здесь.

Spring Roo

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

Spring Shell

Библиотека позволяет легко создавать полнофункциональное приложение оболочки (также известное How командная строка), полагаясь на jar-файлы Spring Shell и добавляя свои собственные команды (которые поступают How методы в Spring beans). Creation applications командной строки может быть полезно, например, для взаимодействия с REST API вашего проекта or для работы с локальным содержимым file. Подробнее читайте тут и тут.

Spring Statemachine

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

Spring Vault

Spring Vault предоставляет знакомые абстракции Spring и поддержку на стороне клиента для доступа, хранения и отзыва секретов. Он предлагает How низкоуровневые, так и высокоуровневые абстракции для взаимодействия с Vault, освобождая пользователя от проблем с инфраструктурой. Пример имплементации Spring Vault What нужно знать о Spring: история появления, ключевые модули, сравнение с Java EE - 10“И все это мне нужно учить?” — изумленно спросите вы. Не пугайтесь! Это не так! Точнее, не совсем так. Это был полный перечень доступных технологий в Spring. Список же технологий, которые необходимо знать новичку гораздо скромнее:
  • Spring Core
  • Spring Boot
  • Spring Web (MVC и REST)
  • Spring Data (Spring ORM, Spring JDBC, Spring JPA)
  • Spring Test
Также есть еще технологии, которые часто встречаются на проектах, но из-за их сложности ими, How правило, занимаются более опытные разработчики, а не зеленые новички. Тем не менее, новичкам также полезно хотя бы в общих чертах разбираться в:
  • Spring Security
  • Spring AOP
  • Spring Cloud
Остальные же технологии используются гораздо реже, поэтому изучать их всерьез нужно лишь для работы на конкретном проекте. К слову, с полным чеклистом того, что должен знать Java-разработчик, вы сможете ознакомиться в другой моей статье. На этом у меня сегодня все, всем до скорого! What нужно знать о Spring: история появления, ключевые модули, сравнение с Java EE - 11
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION