JavaRush /Курсы /Модуль 5. Spring /Обзор Spring Framework

Обзор Spring Framework

Модуль 5. Spring
1 уровень , 0 лекция
Открыта

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+.

История Spring и Spring Framework

Spring появился на свет в 2003 году как реакция на сложность ранних спецификаций J2EE. Хотя некоторые считают, что 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, с которыми вы, возможно, захотите ознакомиться при решении конкретной проблемы.

Комментарии (33)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Virgilion Уровень 41
18 февраля 2025
Советую перед прочтением пройти какой-нибудь простенький курс по Spring (типа Трегулова), т.к. тут хорошо описывается что как и почему происходит, с примерами и т.д., но понять что-то без малейшего представления о спринге будет тяжко. Я сначала решил изучить здесь - забросил, потом за несколько дней прошел спринг для начинающих от Заура + месяц изучал просторы интернета, и написал пару не самых маленьких и простых приложений с использованием (Boot, Web, Data, Security) и снова вернулся сюда. Теперь всё встает на свои места но с периодическими вопросами к GPT чтобы он рассказал о каких-то классах, интерфейсах или аннотациях...
Никита QA Уровень 36
2 ноября 2024
Подскажите, после какого уровня в JavaRush можно начинать изучать Spring? Заранее спасибо!
Зепп Бранниган Уровень 41 Moderator
5 ноября 2024
После прохождения всех предыдущих квестов.
Virgilion Уровень 41
18 февраля 2025
Проходишь Syntax, Core, Multithreading, JSP&Servlets, SQL&Hibernate а уже потом можешь браться за спринг. Collections лично я перед Spring не проходил.
Anonymous #3555639 Уровень 34
17 октября 2025
скажите а там есть практическая часть по типу проверки как в остальных или чисто теория?
Anonymous #3555639 Уровень 34
17 октября 2025
но почему когда открываешь карту квестов пишет доступен а когда переходишь пишет не доступен
Зепп Бранниган Уровень 41 Moderator
17 октября 2025
Полноценно с практикой этот квест доступен в нашем Университете.
Anonymous #3555639 Уровень 34
18 октября 2025
там тоже с проверками будет по типу кнопки Validate
Dmytrii Уровень 69
13 июня 2026
нет
Иван Корниенко Уровень 109
9 сентября 2024
Perl Developer Уровень 11
28 апреля 2024
Машинный перевод какой-то.
Олег Уровень 111 Expert
19 ноября 2023
"забоченность проектированием API" - ???
Ilya Rebus Уровень 1
17 сентября 2023
Инфа мусор, не рекомендую
Сергей Уровень 21
22 марта 2023
Спасибо, но я лучше алишева, трегулова... тут инфа выглядит как будто 15 летней давности, хотя курс свежий
Дмитрий Уровень 16
11 марта 2023
Отлично, очень долго ждали! Местами кажется, что это перевод статьи
Popka Уровень 1
25 января 2023
Наконец-то, как же долго я этого ждал
Андрей Пазюк Уровень 117 Expert
1 февраля 2023
Popka, представь как я долго ждал))