Spring Framework
| Spring Framework | |
|---|---|
| Тип | Application framework |
| Разработчик | VMware |
| Написана на | Java[2], Kotlin и Groovy |
| Операционная система | Кроссплатформенное ПО |
| Дата выпуска | 16 ноября2002 |
| Аппаратная платформа | Java |
| Последняя версия | |
| Репозиторий | github.com/spring-projec… |
| Состояние | Active |
| Лицензия | Apache License 2.0 |
| Сайт | spring.io |
Spring Framework (или короткоSpring) — универсальныйфреймворкс открытым исходным кодом дляJava-платформы. Также существуетфорк для платформы.NET Framework, названный Spring.NET[3].
Первая версия была написанаРодом Джонсоном, который впервые опубликовал её вместе с изданием своей книги «Expert One-on-One Java EE Design and Development»[4] (Wrox Press,октябрь2002 года).
Фреймворк был впервые выпущен под лицензиейApache 2.0 license в июне 2003 года. Первая стабильная версия 1.0 была выпущена в марте2004. Spring 2.0 был выпущен в октябре 2006, Spring 2.5 — в ноябре 2007, Spring 3.0 в декабре 2009, и Spring 3.1 в декабре 2011. Текущая версия — 6.0.x.
Несмотря на то, что Spring не обеспечивал какую-либо конкретную модель программирования, он стал широко распространённым в Java-сообществе главным образом как альтернатива и замена моделиEnterprise JavaBeans. Spring предоставляет бо́льшую свободу Java-разработчикам в проектировании; кроме того, он предоставляет хорошо документированные и лёгкие в использовании средства решения проблем, возникающих при создании приложений корпоративного масштаба.
Между тем, особенности ядра Spring применимы в любом Java-приложении, и существует множество расширений и усовершенствований для построениявеб-приложений наJava Enterprise платформе. По этим причинам Spring приобрёл большую популярность и признаётся разработчиками как стратегически важный фреймворк.
Введение
[править |править код]Spring обеспечивает решения многих задач, с которыми сталкиваются Java-разработчики и организации, которые хотят создать информационную систему, основанную на платформеJava. Из-за широкой функциональности трудно определить наиболее значимые структурные элементы, из которых он состоит.Spring не всецело связан с платформойJava Enterprise, несмотря на свою масштабную интеграцию с ней, что является важной причиной его популярности.
Spring, вероятно, наиболее известен как источник расширений (features), нужных для эффективной разработки сложных бизнес-приложений вне тяжеловесных программных моделей, которые исторически были доминирующими в промышленности. Ещё одно его достоинство в том, что он ввел ранее неиспользуемые функциональные возможности в сегодняшние господствующие методы разработки, даже вне платформы Java.
Этот фреймворк предлагает последовательную модель и делает её применимой к большинству типов приложений, которые уже созданы на основе платформы Java. Считается, чтоSpring реализует модель разработки, основанную на лучших стандартах индустрии, и делает её доступной во многих областях Java.
Модули
[править |править код]Spring может быть рассмотрен как коллекция меньших фреймворков или фреймворков во фреймворке. Большинство этих фреймворков может работать независимо друг от друга, однако они обеспечивают большую функциональность при совместном их использовании. Эти фреймворки делятся на структурные элементы типовых комплексных приложений:
- Inversion of Control-контейнер: делегированное (фреймворку) конфигурирование компонентов приложений и управление жизненным циклом Java-объектов.
- Фреймворкаспектно-ориентированного программирования: работает с функциональностью, которая не может быть реализована возможностямиобъектно-ориентированного программирования на Java без потерь.
- Фреймворк доступа к данным: работает ссистемами управления реляционными базами данных на Java-платформе, используяJDBC- иORM-средства и обеспечивая решения задач, которые повторяются в большом числе Java-based environments.
- Фреймворк управлениятранзакциями: координация различныхAPI управления транзакциями и инструментарий настраиваемого управления транзакциями для объектов Java.
- ФреймворкMVC: каркас, основанный наHTTP исервлетах, предоставляющий множество возможностей для расширения и настройки (customization).
- Фреймворк удалённого доступа: конфигурируемая передача Java-объектов через сеть в стилеRPC, поддерживающаяRMI,CORBA,HTTP-based протоколы, включаяweb-сервисы (SOAP).
- Фреймворкаутентификации иавторизации: конфигурируемый инструментарий процессов аутентификации и авторизации, поддерживающий много популярных и ставших индустриальными стандартами протоколов, инструментов, практик через дочерний проектSpring Security (ранее известный какAcegi).
- Фреймворк удалённого управления: конфигурируемое представление и управление Java-объектами для локальной или удалённой конфигурации с помощьюJMX.
- Фреймворк работы с сообщениями: конфигурируемая регистрация объектов-слушателей сообщений для прозрачной обработки сообщений изочереди сообщений с помощьюJMS, улучшенная отправка сообщений по стандарту JMS API.
- Тестирование: каркас, поддерживающий классы для написания модульных и интеграционных тестов.
Inversion of Control
[править |править код]Центральной частью Spring является контейнерInversion of Control, который предоставляет средства конфигурирования и управления объектами Java с помощьюрефлексии. Контейнер отвечает за управление жизненным циклом объекта: создание объектов, вызов методов инициализации и конфигурирование объектов путём связывания их между собой.
Объекты, создаваемые контейнером, также называютсяуправляемыми объектами (beans). Обычно конфигурирование контейнера осуществляется путём внедрения аннотаций (начиная с5 версии J2SE), но также есть возможность "по старинке" загрузить XML-файлы, содержащиеопределение bean’ов и предоставляющие информацию, необходимую для создания bean’ов.
Объекты могут быть получены одним из двух способов:
- Поиск зависимости — шаблон проектирования, в котором вызывающий объект запрашивает у объекта-контейнера экземпляр объекта с определённым именем или определённого типа.
- Внедрение зависимости — шаблон проектирования, в котором контейнер передает экземпляры объектов по их имени другим объектам с помощьюконструктора, свойства илифабричного метода.
MVC
[править |править код]Spring имеет собственнуюMVC-платформу веб-приложений, которая не была первоначально запланирована. Разработчики Spring решили написать её по причине того что фреймворкApache Struts, а также другие доступные на тот момент веб-фреймворки имели неудачную архитектуру. В частности, по их мнению, было недостаточным разделение между слоями представления и обработки запросов, а также между слоем обработки запросов и моделью[5].
КлассDispatcherServlet является основным контроллером фреймворка и отвечает за делегирование управления различным интерфейсам, на всех этапах выполнения HTTP-запроса. Об этих интерфейсах следует сказать более подробно.
Как и Struts, Spring MVC является фреймворком, ориентированным на запросы. В нем определеныстратегические интерфейсы для всех функций современной запросно-ориентированной системы. Цель каждого интерфейса — быть простым и ясным, чтобы пользователям было легко его заново имплементировать, если они того пожелают. MVC прокладывает путь к более чистому front-end-коду. Все интерфейсы тесно связаны сServlet API. Эта связь рассматривается некоторыми как неспособность разработчиков Spring предложить для веб-приложений абстракцию более высокого уровня. Однако эта связь оставляет особенности Servlet API доступными для разработчиков, облегчая все же работу с ним. Наиболее важные интерфейсы, определенные Spring MVC, перечислены ниже:
- HandlerMapping: выбор класса и его метода, которые должны обработать данный входящий запрос на основе любого внутреннего или внешнего для этого запроса атрибута или состояния.
- HandlerAdapter: вызов и выполнение выбранного метода обработки входящего запроса.
- Controller: включен между Моделью (Model) и Представлением (View). Управляет процессом преобразования входящих запросов в адекватные ответы. Действует как ворота, направляющие всю поступающую информацию. Переключает поток информации из модели в представление и обратно.
- View: ответственно за возвращение ответа клиенту в виде текстов и изображений. Некоторые запросы могут идти прямо во View, не заходя в Model; другие проходят через все три слоя.
- ViewResolver: выбор, какое именно View должно быть показано клиенту.
- HandlerInterceptor: перехват входящих запросов. Сопоставим, но не эквивалентен сервлет-фильтрам (использование не является обязательным и не контролируется DispatcherServlet-ом).
- LocaleResolver: получение и, возможно, сохранение локальных настроек (язык, страна, часовой пояс) пользователя.
- MultipartResolver: обеспечивает Upload — загрузку на сервер локальных файлов клиента.
Spring MVC предоставляет разработчику следующие возможности:
- Ясное и прозрачное разделение между слоями в MVC и запросах.
- Стратегия интерфейсов — каждый интерфейс делает только свою часть работы.
- Интерфейс всегда может быть заменен альтернативной реализацией.
- Интерфейсы тесно связаны с Servlet API.
- Высокий уровень абстракции для веб-приложений.
В веб-приложениях можно использовать различные части Spring, а не только Spring MVC.
Доступ к данным
[править |править код]Spring предоставляет свой слой доступа к базам данных посредствомJDBC. Кроме того, он поддерживает все популярныеORM:Hibernate,JPA,JDO,EclipseLink,iBatis,Apache OJB,Apache Cayenne и т. п..
Для всех этих фреймворков, Spring предоставляет такие особенности:
- Управление ресурсами — автоматическое получение и освобождение ресурсов базы данных
- Обработка исключений — перевод исключений при доступе к данным в исключения Spring-а
- Транзакционность — прозрачные транзакции в операциях с данными
- Распаковка ресурсов — получение объектов базы данных из пула соединений
- Абстракция для обработкиBLOB иCLOB
Управление транзакциями
[править |править код]Фреймворк управления транзакциями в Spring привносит механизм абстракций для платформы Java.Основные возможности этих абстракций:
- работа с локальными и глобальными транзакциями
- работа с вложенными транзакциями
- работа сточками сохранения в транзакциях
«Соглашение прежде конфигурации» в разработке приложения
[править |править код]Spring Roo — фреймворк, поддерживающий принцип «соглашение прежде конфигурации» для быстрого создания бизнес-приложений.
Может использоваться со:
- Spring Framework
- Spring Security
- Spring Web Flow
Интеграция
[править |править код]Spring Integration — фреймворк дляJEE, который предоставляет функции, необходимые для отправки сообщений или для построения событийно-ориентированной архитектуры…
- роутеры
- трансформеры
- адаптеры для интеграции с другими технологиями и системами (HTTP,AMQP,JMS,XMPP,SMTP,IMAP,FTP (FTPS/SFTP), файловые системы и т. д.)
- фильтры
- активаторы сервисов
- аудит и управление
Spring Hadoop
[править |править код]29 февраля 2012 годаVMware выпустил продукт интеграции Spring с Apache Hadoop. Новый фреймворк Spring Hadoop[6] комбинирует возможности Spring Framework с возможностьюHadoop, позволяющей разработчикам создавать приложения, которые масштабируются от одного сервера до тысяч и обеспечивают высокую доступность через программное обеспечение, а не аппаратные средства. ИнтегрируяHadoop Framework, основанную наJava,open-source платформу для распределенной обработки больших наборов данных вкластерах компьютеров, использующую простую модель программирования, с фреймворком Spring для разработки приложений Java/JEE, VMware создал проект, который полностью попадает под «зонтик» Spring Data[7][8].
Среди возможностей нового фреймворка:
- декларативная поддержка конфигурацииHBase;
- специализированная поддержка Spring Batch для разработки потоковых решений, которые включают операцииHDFS и все типы заданийHadoop;
- поддержка использования с интеграцией Spring;
- параметры конфигурацииHadoop и механизм шаблонной обработки для соединений клиента сHadoop;
- декларативная и программируемая поддержка для инструментовHadoop, включаяFsShell иDistCp[8].
Примечания
[править |править код]- ↑spring-projectsRelease v7.0.0 · spring-projects/spring-framework
- ↑https://github.com/EvanLi/Github-Ranking/blob/master/Data/github-ranking-2025-07-06.csv — 2025.
- ↑Spring.NET Application Framework . Дата обращения: 19 мая 2010. Архивировано 2 апреля 2006 года.
- ↑Expert One-on-One J2EE Design and DevelopmentАрхивная копия от 7 мая 2012 наWayback Machine (англ.)
- ↑Johnson, Expert One-on-One J2EE Design and Development, Ch. 12. et al.
- ↑Spring Hadoop . Дата обращения: 24 сентября 2013. Архивировано 28 сентября 2013 года.
- ↑Spring Data . Дата обращения: 24 сентября 2013. Архивировано 27 сентября 2013 года.
- ↑12Spring Hadoop: новый фреймворк для Java-разработчиков под «зонтиком» Spring DataАрхивировано 27 сентября 2013 года..High Load WebАрхивная копия от 4 апреля 2012 наWayback Machine.
Литература
[править |править код]- Ю. Козмина, Р. Харроп, К. Шефер, К. Хо. Spring 5 для профессионалов = Pro Spring 5: An In-Depth Guide to the Spring Framework and Its Tools. —М.:«Вильямс», 2019. — 1120 с. —ISBN 978-5-907114-07-4, 978-1-4842-2807-4.
- Раджпут Д. Spring. Все паттерны проектирования = Spring 5 Design Patterns: Master efficient application development with patterns such as proxy, singleton, the template method, and more. —СПб.:«Питер», 2019. — 320 с. —ISBN 978-5-4461-0935-7.
- Лонг Д., Бастани К. Java в облаке. Spring Boot, Spring Cloud, Cloud Foundry = Cloud Native Java: Designing Resilient Systems with Spring Boot, Spring Cloud, and Cloud Foundry. —СПб.:«Питер», 2019. — 624 с. —ISBN 978-5-4461-0713-1.
Ссылки
[править |править код]- Сайт проекта (англ.)
- Документация