JavaRush /Java блог /Random UA /Що потрібно знати про Spring: історія появи, ключові моду...
Константин
36 рівень

Що потрібно знати про Spring: історія появи, ключові модулі, порівняння з Java EE

Стаття з групи Random UA
Вітання! В даний момент найпопулярніший напрямок розвитку для девелопера зі знанням Java - веб-технологія. Само собою, для цієї спеціальності є перелік обов'язкових для вивчення технологій. Одна з головних - Spring . Що потрібно знати про Spring: історія появи, ключові модулі, порівняння з Java EE - 1Ви можете заперечити: замість нього можна вивчити Java EE . Це, звичайно, вірно, але зараз у переважній більшості нових проектів використовується саме Spring , що зробило його фактично дефолтною, обов'язковою технологією для Java веб-розробника. І якщо ви хочете йти нога в ногу із потребами ринку, вам доведеться його вивчити. Сьогодні я хотів би поговорити про Spring , а саме — трохи розширити ваше бачення про нього: розповісти про історію його створення, ключові відмінності від Java EEстека і зробити невеликий огляд ключових компонентів Spring стека. Давайте ж приступимо! Що потрібно знати про Spring: історія появи, ключові модулі, порівняння з Java EE - 2

1. Як і коли з'явився Spring і що розвинувся з часом

Все почалося в жовтні 2002 року , коли Род Джонсон написав Що потрібно знати про Spring: історія появи, ключові модулі, порівняння з Java EE - 3книгу “Expert One-onOne J2EE Design and Development” : середовища EJB(Enterprise Java Bean). Одночасно з цим, Род Джонсон пропонує простіше рішення, засноване на звичайних Java-класах (POJO - прості старі Java-об'єкти) і впровадження залежностей. У книзі він пояснює, як можна створити високоякісне масштабоване додаток для онлайн-бронювання місць без використання EJB. Тобто. він наочно продемонстрував, як усунути складності розробки додатків і уможливити використання простих компонентів JavaBean, щоб досягти всього, що раніше було можливим лише з використанням EJB. Однак область застосування Springне обмежується розробкою програмних компонентів, що виконуються за сервера. Будь-який Java-додаток може використовувати переваги фреймворку в плані простоти, тестованості та слабкої зв'язаності. Наведений дизайн розробки J2EE миттєво став хітом. Більшість коду програми, безкоштовно наданого як частину книги, можна було багаторазово використовувати, і незабаром низка розробників почали використовувати його у своїх проектах. У Wrox була веб-сторінка для книгиз вихідним кодом та виправленнями. Також надали онлайн-форум для книги. У лютому 2003 року розробники Юрген Хеллер та Янн Карофф переконали Рода Джонсона створити проект із відкритим вихідним кодом на основі коду наведеної інфраструктури. З того моменту Род, Юрген та Янн розпочали свою співпрацю над створенням чогось абсолютно нового. Власне, саме Ян Карофф і придумав назву Spring для нового фреймворку. Тут було на увазі, що Spring - як весна: новий старт після «зими» традиційного J2EE.
  • У червні 2003 року Spring 0.9 випустабо під ліцензією Apache 2.0.
  • У березні 2004 року виходить Spring 1.0. Цікаво, що навіть до випуску Spring 1.0, попередню версію 0.9 дуже тепло сприйняли, і вона набула широкого поширення.
  • У серпні 2004 року Род Джонсон, Юрген Хеллер, Кейт Дональд і Колін Сампалеану стали співзасновниками interface21 — компанії, яка займається консультуванням, навчанням та підтримкою Spring.
  • Жовтень 2006: виходить версія Spring 2.0, яка спростила файли конфігурації XML.
  • У Spring 2.5, що з'явилася листопаді 2007 року, було представлено зміни анотацій.
  • Spring 3.2, що вийшла у грудні 2012 року, представила конфігурацію Java, підтримувала Java 7, Hibernate 4, Servlet 3.0, а також вимагала як мінімум Java 1.5.
  • Янн Карофф залишив команду на самому початку. Род Джонсон залишив "весняну" команду у 2012 році. Юрген Хеллер, як і раніше, є активним членом команди розробників Spring.
  • У Spring 4.0, що вийшла 2014 року, додали підтримку Java 8.
  • Також у 2014 році світові представабо Spring Boot.
  • Spring 5.0 вийшла у 2017 році. Як і Spring Boot 2.x, що підтримує Spring 5.
  • Власне, таким чином наш улюблений фреймворк став таким, яким ми знаємо його зараз.

2. Spring vs Java EE

Проведемо невелике порівняння двох ключових стеків Java веб-розробника: Spring та Java EE. Що потрібно знати про Spring: історія появи, ключові модулі, порівняння з Java EE - 4
Java EE
Переваги Недоліки
  • Програми, написані на Java EE, вважаються більш надійними, безпечними та масштабованими
  • Java EE - затверджений промисловістю стандарт API
  • Переважно заснований на анотаціях та CDI (context and dependency injection), як втім і Spring
  • Реалізація на основі EJB контейнерів та POJO
  • Складні програми з великою кількістю транзакцій дуже добре обробляються JEE
  • Успішний у використанні для масштабованого додатка
  • Java EE має свою ООП мову, що містить певний стиль і синтаксис
  • Дуже складне середовище розробки додатків, яке складно зрозуміти новачкам (і стареньким часом теж)
  • Остаточна вартість проекту, включаючи розробку, розгортання та розробку додатків, може виявитися непомірно високою.
Java EE, що має ліцензію Oracle, призначений для організацій і компаній, яким потрібне широке адаптоване середовище для створення масових додатків. Як і Spring, Java EE включає додаткові бібліотеки для доступу до баз даних (JDBC, JPA), виклику віддаленої техніки (RMI), інформування (JMS), веб-адміністрування, обробки XML і характеризує стандартні API-інтерфейси для корпоративних JavaBeans, портлетів, сервлетів, сторінок сервера Java тощо. Що потрібно знати про Spring: історія появи, ключові модулі, порівняння з Java EE - 5Фундаментальна мета Java EE полягає в тому, щоб розплутати основні проблеми, з якими стикаються розробники щодо побудови поточних програм за допомогою різних API. У цей же час розробка на Java EE має високий рівень складності, що задирає непомірно високу планку не тільки для новачків. Та й досвідченим фахівцям буває складно зрозуміти вже написаний функціонал, тому розробка на Java EE довша і, відповідно, дорожча. Про Java EE двома словами можна сказати так: Складно, але гнучко. Ну а тепер давайте поговоримо трохи про Spring-е . Що потрібно знати про Spring: історія появи, ключові модулі, порівняння з Java EE - 6
Spring
Переваги Недоліки
  • Дозволяє ефективно організовувати взаємодії об'єктів
  • Простіший, ніж Java EE
  • Реалізований на основі IOC та AOP , що забезпечує слабку пов'язаність додатків
  • Працює на основі конфігурації XML, Groovy або анотацій
  • Дозволяє використовувати прості старі об'єкти Java - POJO, розробникам не потрібен корпоративний контейнер, такий як сервер додатків
  • Забезпечує розробникам Java високий рівень модульності
  • Надає реалізацію бібліотек Java EE, але на свій лад, завдяки чому їх використання стане в рази простіше
  • Ліцензія з відкритим кодом
  • Spring Boot сильно спрощує первинне налаштування програми
  • Код програми Spring, як правило, простий для тестування
  • Відносно складно розвивати Spring, оскільки в ньому відсутня чітка спрямованість
  • Для початківця розробника Java вивчення середовища Spring може бути складним завданням (але все одно простіше, ніж Java EE)
  • Spring повільніше, ніж Java EE
Spring - це система з відкритим кодом для Java для великого бізнесу. Структура Spring націлена на те, щоб надати максимально просту реалізацію ідей J2EE та використати відмінну практику програмування за рахунок розширення можливостей моделі програмування на основі POJO. Тобто. Java EE - скоріше офіційний стандарт, тоді як Spring - це скоріше фреймворк, що реалізує цей стандарт.

Підсумки порівняння

У моєму розумінні Java EE і Spring – це як JDBC та Hibernate, де JDBC – швидша технологія, але в той же час з великою кількістю зайвого коду. Hibernate вже використовує JDBC, але при цьому спрощуючи і скорочуючи розробку в рази (хоч і накладаючи деякі обмеження). Не можна однозначно сказати, хто з них кращий. Також це чимось нагадує питання: що краще – ArrayList чи LinkedList. Адже відповідь буде тим самим — дивлячись у якій ситуації. У кожного з них є свої сильні та слабкі сторони, і вибирати з них потрібно ретельно, зваживши свою ситуацію та зрозумівши, хто з них зараз принесе найбільшу користь. Що потрібно знати про 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 , скорочуючи до мінімуму первинне налаштування програми та автоконфігурує елементи програми на Spring. Приклад запуску Spring boot за 5 хвабон

Spring Data

Значно спрощує використання технологій доступу до даних, реляційних і нереляційних баз даних (прибирає код, що повторюється, і спрощує взаємодію з даними). У цій статті – непоганий туторіал щодо підключення Spring Data.

Spring Cloud

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

Spring Security

Надає потужний і настроюваний інструмент автентифікації (аутентифікації) і контролю доступу (авторизації) в додаток. Нескладний приклад підключення Spring Security до свого додатку ви можете знайти у цьому пості . Що потрібно знати про Spring: історія появи, ключові модулі, порівняння з Java EE - 8

Spring GraphQL

Цей модуль забезпечує підтримку програм Spring, побудованих на GraphQL Java. GraphQL - це мова запитів для API, що дозволяє клієнтам вимагати обмежену кількість даних, яких вони потребують, що в свою чергу дозволяє збирати дані в обмеженій кількості запитів. Якщо ви вже знайомі з JPA, можливо вже зустрічали EntityGraph, зі схожою (або тією ж) концепцією. Детальніше про GraphQL можна почитати ось тут .

Spring Session

Дана частина фреймворку Spring надає API та реалізації для управління інформацією про сеанс користувача (дані сеансу користувача зберігаються в постійному сховищі на кшталт Redis , MongoDb , HazelCast і т.д). З прикладом використання Spring Session можна ознайомитись ось тут .

Spring Integration

Цей модуль призначений для спрощеного обміну повідомленнями у додатках на основі Spring та підтримки інтеграції із зовнішніми системами через декларативні адаптери. Ці адаптери забезпечують більш високий рівень абстракції порівняно з підтримкою Spring для віддаленої взаємодії, обміну повідомленнями та планування. Детальна стаття .

Spring REST

Надає багатий набір інструментів, що спрощує розробку REST API: інструменти для маршрутизації запитів, перетворення JSON/XML в об'єкти необхідних типів і т.д. Приклад RESTful сервісу на Spring можна знайти у цьому матеріалі .

Spring Web Flow

Spring Web Flow заснований на Spring MVC і дозволяє реалізувати потоки веб-додатку. Такі потоки інкапсулюють послідовність кроків, які направляють користувача через виконання деякого бізнес-завдання. Вони охоплюють кілька HTTP-запитів, мають стан, працюють із транзакційними даними, можуть використовуватися повторно і можуть бути динамічним та довготривалим за своєю природою. Приклад підключення Spring Web Flow можна розглянути в цьому гайді англійською .

Spring WebServices

Цей модуль покликаний полегшити розробку сервісів SOAP на основі контрактів, дозволяючи створювати гнучкі веб-сервіси, використовуючи один із багатьох способів маніпулювання корисними навантаженнями XML. SOAP - Simple Object Access Protocol - Простий протокол доступу до об'єктів.

Spring HATEOAS

Модуль надає деякі API-інтерфейси для спрощення створення REST контролерів, які дотримуються принципу HATEOAS при роботі зі Spring та особливо Spring MVC. HATEOAS – Hypermedia As The Engine Of Application State – Гіпермедіа як двигун стану програми. Використання цієї бібліотеки Spring ви можете побачити тут .

Spring Batch

Цей модуль надає функціонал для пакетних обробок даних (коли дані обробляються великими шматками - пакетами), життєво важливих для повсякденної роботи корпоративних систем. У Spring Batch надано функції багаторазового використання, які необхідні для обробки великих обсягів записів, включаючи ведення журналу/трасування, керування транзакціями, статистику обробки завдань, перезапуск завдань, пропуск та керування ресурсами. Цікавий огляд Spring Batch ви можете знайти за цим посиланням .

Spring AMQP

Модуль застосовує основні концепції Spring для розробки рішень обміну повідомленнями на основі AMQP. Він надає шаблон (template) як високорівневу абстракцію для надсилання та отримання повідомлень. Також забезпечується підтримка POJO, керованих повідомленнями, із контейнером слухача (listener container). AMQP - Advanced Message Queueing Protocol - Розширений протокол черги повідомлень. Проект містить дві частини: spring-amqp – це базова абстракція, а spring-rabbit – це реалізація для RabbitMQ . Приклад із підключенням RabbitMQ з використанням Spring Що потрібно знати про Spring: історія появи, ключові модулі, порівняння з Java EE - 9

Spring for Apache Kafka

Цей проект застосовує основні концепції Spring до розробки рішень для обміну повідомленнями на основі Kafka . Надається шаблон (template) як високорівнева абстракція для надсилання повідомлень. Також забезпечується підтримка об'єктів POJO, керованих повідомленнями, з необхідними інструкціями та контейнером слухача (listener container). Тут явно проглядається схожість зі Spring AMQP, але цей модуль адаптований безпосередньо під Kafka. Приклад підключення Spring Kafka можна підглянути ось тут .

Spring CredHub

Надає підтримку на стороні клієнта для зберігання, отримання та видалення облікових даних із сервера CredHub, що працює на платформі Cloud Foundry . CredHub – надає API для безпечного зберігання, створення, вилучення та видалення облікових даних різних типів. Spring CredHub надає прив'язку Java для CredHub API, що спрощує інтеграцію додатків Spring із CredHub.

Spring FLO

Це бібліотека JavaScript, яка пропонує простий візуальний конструктор HTML5 для конвеєрів і простих графіків для моніторингу потокової і пакетної передачі даних. Демо даної технології - у відео за посиланням .

Spring LDAP

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

Spring Roo

Даний модуль є інструментом RAD, який може створювати і керувати вашим додатком на основі Spring. Його мета – підвищити продуктивність розробників Java. Він не може написати бізнес-логіку вашої програми, але може обробляти конфігураційні та інфраструктурні речі.

Spring Shell

Бібліотека дозволяє легко створювати повнофункціональний додаток оболонки (також відомий як командний рядок), покладаючись на jar-файли Spring Shell і додаючи свої власні команди (які надходять як методи Spring beans). Створення програми командного рядка може бути корисним, наприклад, для взаємодії з REST API вашого проекту або для роботи з локальним вмістом файлу. Детальніше читайте тут і тут .

Spring Statemachine

Цей модуль дозволяє розробникам додатків використовувати концепції кінцевого автомата з програмами Spring. Детальний приклад використання даної функціональності можна знайти ось тут і ось тут .

Spring Vault

Spring Vault надає знайомі абстракції Spring та підтримку на стороні клієнта для доступу, зберігання та відкликання секретів. Він пропонує як низькорівневі, так і високорівневі абстракції для взаємодії з Vault , звільняючи користувача від проблем з інфраструктурою. Приклад імплементації Spring Vault Що потрібно знати про Spring: історія появи, ключові модулі, порівняння з Java EE - 10І все це мені потрібно вчити? — здивовано спитайте ви. Не лякайтесь! Це не так! Точніше, не зовсім так. Це був повний перелік доступних технологій у Spring. Список технологій, які необхідно знати новачкові набагато скромніше:
  • Spring Core
  • Spring Boot
  • Spring Web (MVC та REST)
  • Spring Data (Spring ORM, Spring JDBC, Spring JPA)
  • Spring Test
Також є ще технології, які часто зустрічаються на проектах, але через їхню складність ними, як правило, займаються досвідченіші розробники, а не зелені новачки. Тим не менш, новачкам також корисно хоча б загалом розбиратися в:
  • Spring Security
  • Spring AOP
  • Spring Cloud
Інші технології використовуються набагато рідше, тому вивчати їх всерйоз потрібно лише для роботи на конкретному проекті. До речі, з повним чекістом того, що повинен знати Java-розробник , ви зможете ознайомитися в іншій статті. На цьому у мене сьогодні все, всім швидким! Що потрібно знати про Spring: історія появи, ключові модулі, порівняння з Java EE - 11
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ