Spring спрощує створення корпоративних програм із використанням Java. Він надає все необхідне для використання мови Java у корпоративному середовищі, у тому числі підтримку Groovy та Kotlin як альтернативних мов у JVM, а також пропонує гнучкість для створення безлічі видів архітектур в залежності від потреб програми. Починаючи зі Spring Framework 5.1, Spring вимагає JDK 8+ (Java SE 8+) та забезпечує вбудовану підтримку JDK 11 LTS. Оновлення Java SE 8 update 60 пропонується використовувати як мінімально допустимий реліз виправлень для Java 8, але зазвичай рекомендується використовувати найсвіжіший реліз виправлень.

Spring підтримує широкий спектр сценаріїв застосування. На великому підприємстві програми часто використовуються протягом тривалого часу і повинні виконуватися на JDK та сервері додатків, цикл оновлення яких знаходиться поза контролем розробника. Одні програми можуть працювати як єдиний jar-файл на вбудованому сервері, можливо, у хмарному середовищі. Інші можуть бути автономними (наприклад, пакетні або інтеграційні робочі навантаження), яким не потрібен сервер.

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

Що ми маємо на увазі під "Spring"

Термін "Spring" означає різні речі в різних контекстах. Його можна використовувати для позначення самого проєкту Spring Framework, з якого все почалося. Згодом інші проєкти Spring були створені поверх Spring Framework. Найчастіше, коли люди говорять "Spring", вони мають на увазі все сімейство проєктів. Ця документація зосереджена на основі: самому фреймворку Spring Framework.

Spring Framework поділено на модулі. Програми можуть обирати, які модулі їм потрібні. В основі лежать модулі основного контейнера, включно з моделлю конфігурації та механізмом застосування залежностей (Dependency Injection (DI)). До того ж, Spring Framework забезпечує базову підтримку різних архітектур додатків, в тому числі обмін повідомленнями, транзакційні дані та зберігання, а також інтернет. Він також включає в себе вебфреймворк Spring MVC на основі сервлетів і, паралельно, реактивний вебфреймворк Spring WebFlux.

Примітка щодо модулів: jar-файли фреймворка Spring дозволяють розгортати їх на шляху до модуля JDK 9 ("Jigsaw"). Для використання у програмах з підтримкою Jigsaw jar-файли Spring Framework 5 поставляються із записами маніфесту "Automatic-Module-Name", які визначають стабільні імена модулів на рівні мови ("spring.core", "spring.context" тощо), незалежні від імен артефактів jar (jar-файли мають однаковий шаблон іменування з "-" замість ".", наприклад "spring-core" та "spring-context"). Звісно, jar-файли фреймоврка Spring все ще нормально працюють з classpath: як в JDK 8, так і в 9+. Хоча деякі вважають, що Java EE та Spring є конкурентами, Spring по суті доповнює Java EE. Модель програмування Spring не охоплює специфікації платформи Java EE; скоріше, вона інтегрується з ретельно відібраними окремими специфікаціями з узагальненої EE:

  • Servlet API (JSR 340)
  • WebSocket API (JSR 356)
  • Утиліти паралелізму (JSR 236)
  • JSON Binding API (JSR 367 )
  • Bean Validation (JSR 303 )
  • JPA (JSR 338)
  • JMS (JSR 914)
  • а також конфігурації JTA/JCA для координації транзакцій, якщо це необхідно.

Spring Framework також підтримує специфікації впровадження залежностей (JSR 330) та загальних анотацій (JSR 250), які розробники додатків можуть використовувати замість специфічних для Spring механізмів, що надаються Spring Framework.

Починаючи зі Spring Framework 5.0, Spring вимагає як мінімум рівня Java EE 7 (наприклад, Servlet 3.1+, JPA 2.1+), водночас надає вбудовану інтеграцію з новими API на рівні Java EE 8 (наприклад, Servlet 4.0, JSON Binding API), коли зустрічається під час виконання. Це забезпечує повну сумісність Spring, скажімо, з Tomcat 8 і 9, WebSphere 9 і JBoss EAP 7. З часом роль Java EE у розробці додатків еволюціонувала. У перші дні існування Java EE та Spring програми створювалися для розгортання на сервері додатків. Сьогодні за допомогою Spring Boot програми створюються зручним для devops та хмарних обчислень способом за допомогою вбудованого контейнера сервлетів, який легко змінити. Починаючи зі Spring Framework 5, WebFlux навіть не використовує Servlet API безпосередньо і може запускатися на серверах (таких як Netty), які не є контейнерами сервлетів.

Spring продовжує впроваджувати інновації та розвиватися. Крім Spring Framework, існують інші проєкти, такі як Spring Boot, Spring Security, Spring Data, Spring Cloud, Spring Batch тощо. Важливо пам'ятати, що кожен проєкт має власні репозиторій вихідного коду, систему відстеження помилок і частоту релізу нових версій. Подивись у spring.io/projects, щоб ознайомитися з повним списком проєктів Spring.

Принцип проєктування

Коли ти вивчаєш фреймворк, важливо розуміти не тільки те, що він робить, але й за якими принципами він працює. Ось основні принципи роботи Spring Framework:

  • Вибір на кожному рівні. Spring дозволяє відкладати проєктні рішення на "якнайпізніше". Наприклад, ти можеш перемикати постачальників рішень для зберігання даних за допомогою системних налаштувань без змін у коді. Те саме стосується і багатьох інших проблем інфраструктури та інтеграції зі сторонніми API.
  • Облік різних точок зору. Spring передбачає гнучкість і відсутність жорстко встановленого підходу до того, як щось робити. Він пропонує рішення для широкого спектру прикладних потреб із різним баченням.
  • Підтримка високого рівня зворотної сумісності. Еволюційний розвиток Spring був ретельно продуманий таким чином, щоб вносити кілька суттєвих змін між версіями. Spring підтримує ретельно підібраний набір версій JDK та сторонніх бібліотек для полегшення обслуговування програм та бібліотек, що залежать від Spring.
  • Увага до проєктування API. Команда Spring витрачає багато часу та сил на створення інтуїтивно зрозумілих API, які зберігають працездатність у багатьох версіях та протягом багатьох років.
  • Високі стандарти якості коду. Spring Framework робить сильний акцент на змістовному, актуальному та точному javadoc. Це один із дуже небагатьох проєктів, який може претендувати на чисту структуру коду без циклічних залежностей між пакетами.

Зворотний зв'язок і внесок у розвиток

Для пошуку відповідей на практичні питання, діагностики чи налагодження радимо використовувати Stack Overflow. Натисни тут, щоб ознайомитися зі списком пропонованих тегів для використання в Stack Overflow. Якщо ти маєш абсолютну впевненість, що у Spring Framework є проблема, або хочеш запропонувати будь-яку функцію, скористайся GitHub Issues.

Якщо у тебе є на прикметі рішення або запропоноване виправлення, можеш надіслати запит на включення на Github. Втім, зауваж, що з усіх питань, окрім найтривіальніших, запит потрібно надсилати до системи відстеження помилок, де відбуваються обговорення та залишається запис для подальшого використання

Щоб отримати детальнішу інформацію, ознайомся з керівними принципами на сторінці проєкту верхнього рівня "Внесок у розвиток".

Початок роботи

Якщо ти лише починаєш роботу зі Spring, можеш використовувати Spring Framework, створивши програму на основі Spring Boot. Проєкт Spring Boot пропонує швидкий (і жорстко встановлений) спосіб створення готового до роботи програми на основі Spring. Він заснований на Spring Framework, перевага в ньому надається угоді, а не конфігурації, і призначений він для того, щоб дати можливість якнайшвидше взятись до роботи.

Ти можеш використовувати start.spring.io для створення базового проєкту або слідувати одному з посібників з "Початку роботи". Наприклад "Початок створення вебслужби RESTful" . Крім того, що ці посібники легше засвоюються, вони орієнтовані на конкретні завдання, і більшість з них засновані на Spring Boot. Вони також охоплюють інші проєкти з портфоліо Spring, з якими ти, можливо, захочеш ознайомитися при вирішенні конкретної проблеми.