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, с которыми вы, возможно, захотите ознакомиться при решении конкретной проблемы.