Spring framework что это

Обновлено: 29.06.2024

Spring для Java — обширная платформа для создания веб-проектов на Java, состоящая из множества независимых модулей (проектов) для разных задач: от простых веб-приложений до Big Data. Мы рассмотрим, что дают эти модули, какие их основные особенности и для чего их можно использовать.

Что такое Spring?

Spring возник в 2003 году в виде облегчённого аналога платформы для корпоративных приложений Java Enterprise. Он позиционируется как простая в использовании платформа для веб-приложений. Spring поддерживает несколько языков JVM: Java, Kotlin и Groovy.

Spring состоит из большого числа модулей. Среди них есть модули-стартеры, без которых Spring-приложение просто не запустится, а есть также вспомогательные проекты, добавляющие в приложение определённую функциональность: например Spring Data Flow для потоковой обработки данных, Security для безопасности или Cloud для распределённых систем. Такая структура позволяет разработчикам эффективно создавать и поддерживать приложения, используя только нужные инструменты.

Остановимся более подробно на основных модулях Spring и узнаем, для чего их можно использовать.

Несколько слов о Spring Framework

Spring Framework — ядро платформы Spring. Framework неявно используется другими компонентами Spring, например MVC и WebFlux, обеспечивая фундаментальные инструменты для различных архитектур приложений. Мы не будем рассматривать его как отдельный модуль Spring, но перечислим основные характеристики и особенности.

ОТР , Удалённо , По итогам собеседования

Spring Framework включает:

  • Основные технологии: внедрение зависимостей, события, ресурсы, i18n, проверка, связывание данных, преобразование типов, SpEL, AOP.
  • Инструменты тестирования: mock-объекты, TestContext, Spring MVC Test, WebTestClient.
  • Доступ к данным: транзакции, поддержка DAO, JDBC, ORM, Marshalling XML.
  • Интеграцию: удалённое взаимодействие, JMS, JCA, JMX, электронная почта, задачи, планирование, кеш.

Spring Boot

Spring Boot — комплексный фреймворк для создания и запуска приложений с минимальными усилиями и настройками. Этот модуль делится на два стека: основанный на API сервлетов Spring MVC и реактивный Spring WebFlux.

Spring WebFlux — веб-платформа, созданная, чтобы по максимуму использовать преимущества современных многоядерных процессоров и обрабатывать огромное количество одновременных подключений.

Spring MVC построен на API сервлетов и использует архитектуру синхронного блокирующего ввода-вывода с моделью «один запрос на поток».

В Spring Boot также можно опционально подключить библиотеку Reactor для создания реактивных систем на JVM.

Характеристики

  • Встраивание контейнеров Tomcat, Jetty или Undertow напрямую без развёртывания WAR-файлов.
  • Готовые стартовые зависимости, упрощающие конфигурацию сборки.
  • Возможность сконфигурировать проект прямо в браузере с помощью Spring Initializr.
  • Автоматическая настройка сторонних библиотек (по возможности).
  • Готовые к работе функции, такие как сбор метрик, проверка работоспособности и использование внешней конфигурации.
  • Нет кодогенерации и не требуется конфигурация XML — всё конфигурируется через аннотации.

Для чего используется

Вместе со Spring Boot в проектах обычно используются Spring Security и Cloud. С помощью Spring Boot можно создавать:

  • микросервисы;
  • реактивные системы;
  • веб-приложения.

Что почитать и с чего начать

Для скоростного погружения в Spring Boot пройдитесь по руководству по быстрому запуску. Также в официальной документации можно найти гайд по созданию приложения с помощью Spring Boot и туториал для написания веб-службы RESTful.

Spring Data

Модуль обеспечивает приложениям доступ к данным через реляционные и нереляционные базы данных (БД), map-reduce фреймворки и облачные сервисы. Spring Data содержит множество подпроектов, предназначенных для определённых СУБД. Среди них есть, например, MySQL, MongoDB, Redis и многие другие. Также можно использовать подмодули, разработанные сообществом Spring для более специфичных баз данных вроде ArangoDB, Google Datastore, Microsoft Azure Cosmos DB и других.

Основной механизм, реализуемый в Spring Data — репозиторий. Это набор интерфейсов, использующих JPA Entity для взаимодействия с данными.

Характеристики

  • Настраиваемое отображение сущностей в БД на Java-объекты.
  • Создание динамических запросов в базу данных через сигнатуру метода интерфейса репозитория.
  • Базовые классы для различных задач.
  • Прозрачный аудит объектов.
  • Возможность интегрировать собственный код репозитория.
  • Простая интеграция со Spring через JavaConfig, а также кастомных пространств имён XML.
  • Расширенная интеграция с контроллерами Spring MVC.

Для чего используется

Spring Data используется везде, где нужен доступ к данным, и легко интегрируется с другими модулями Spring.

Что почитать и с чего начать

Обо всех модулях Spring Data можно почитать в официальной документации.

Spring Cloud

Со Spring Cloud вы сможете легко и быстро создавать шаблоны в распределённых системах. Из примеров таких шаблонов: управление конфигурацией, обнаружение сервисов, интеллектуальная маршрутизация, микропрокси, одноразовые токены и многое другое.

Шаблоны, созданные с помощью Spring Cloud, будут хорошо работать в любой распределённой среде, включая ваш собственный ноутбук, центры обработки данных и PaaS-платформы, такие как Cloud Foundry.

Spring Cloud также состоит из множества подпроектов для разных целей. Так, Spring Cloud Azure интегрирует Spring со службами Azure, Spring Cloud Stream используется для создания управляемых событиями микросервисов (event-driven microservices) и так далее.

Характеристики

Для чего используется

Spring Cloud содержит много полезных инструментов для микросервисов и распределённых систем.

Что почитать и с чего начать

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

Spring Cloud Data Flow

Spring Cloud Data Flow нужен приложениям, в которых используется потоковая передача и пакетная обработка данных.

Фреймворк поддерживает ряд готовых кейсов обработки данных, среди которых ETL, потоковая обработка событий и прогнозная аналитика.

Характеристики

    приложений на платформах Cloud Foundry и Kubernetes.
  • Готовые приложения для различных сценариев интеграции и обработки данных. приложения, ориентированные на связующее ПО или службы данных.
  • Простой потоковый конвейер DSL, чтобы указывать, какие приложения развёртывать и как подключать выходы и входы.
  • Графический редактор для интерактивного построения конвейеров данных и мониторинга метрик с помощью Wavefront, Prometheus, Influx DB или других систем. для создания и развёртывания конвейеров данных с возможностью работы из командной строки.

Для чего используется

Spring Cloud Data Flow подойдёт для создания конвейеров потоковой обработки данных — например, чтобы пересылать какие-либо данные в базу и затем удобно анализировать их.

Что почитать и с чего начать

Попробуйте создать микросайт с помощью Spring Cloud Data Flow и ознакомиться с примерами использования.

Spring Security

Spring Security — среда аутентификации, авторизации и контроля доступа. Это стандартный фреймворк, который используется для защиты приложений на основе Spring.

Spring Security предоставляет базовые функции безопасности, которые можно легко расширить для ваших собственных нужд.

Характеристики

  • Аутентификация и авторизация пользователей.
  • Защита от атак, таких как фиксация сессии, кликджекинг, подделка межсайтовых запросов и так далее.
  • Возможность интеграции с Servlet API.
  • Опционально подключаемый модуль Spring Web MVC.

Для чего используется

Модуль Security нужен, чтобы обеспечить проверку безопасности и защитить приложение от атак.

Что почитать и с чего начать

На официальном сайте есть небольшое руководство по защите веб-приложения, более подробный гайд с объяснением всех функций и особенностей Spring Security, а также раздел в документации.

Spring Integration

Характеристики

  • Много шаблонов для интеграции приложений предприятия.
  • Интеграция с внешними системами.
  • Веб-сервисы (SOAP и REST).
  • Обширная поддержка JMX.
  • MBeans-компоненты.

Для чего используется

Что почитать и с чего начать

Посмотрите небольшое руководство по созданию приложения, использующего Spring Integration для извлечения данных, их обработки и записи в файл. Также можете изучить более 50 примеров.

Spring Batch

Spring Batch — платформа для разработки пакетных приложений. Spring Batch подойдёт как для простых, так и для более сложных проектов — платформа легко масштабируется и может обрабатывать большие объёмы информации.

Характеристики

  • Управление транзакциями.
  • Обработка на основе фрагментов данных.
  • Декларативный ввод / вывод.
  • Веб-интерфейс администрирования (Spring Cloud Data Flow).

Для чего используется

Spring Batch подойдёт для приложений с многократно используемыми функциями, чтобы обрабатывать большие объёмы записей. Среди таких функций — ведение логов и трассировка, управление транзакциями, статистика обработки заданий, перезапуск и пропуск заданий, управление ресурсами и другие.

Что почитать и с чего начать

Гайд по созданию базовой пакетной службы и более 20 примеров использования Spring Batch.

Мы перечислили лишь ключевые модули Spring. На самом деле их гораздо больше: например, есть ещё Spring for Android для создания Android-приложений, Spring CredHub для взаимодействия с CredHub-сервером, Spring LDAP и многие другие.

С полным списком проектов Spring можно ознакомиться на официальном сайте.

Spring Framework — один из самых популярных фреймворков для создания веб-приложений на Java. Несмотря на то, что Spring не обеспечивал какую-либо конкретную модель программирования, он стал широко распространённым в Java-сообществе главным образом как альтернатива и замена модели Enterprise JavaBeans. Spring предоставляет бо́льшую свободу Java-разработчикам в проектировании, так как Spring предлагает массу функций, которые недоступны в качестве стандартов Java EE, например, Spring Batch или Spring Integration; кроме того, он предоставляет хорошо документированные и лёгкие в использовании средства решения проблем, возникающих при создании приложений корпоративного масштаба. [Источник 2]

Между тем, особенности ядра Spring применимы в любом Java-приложении, и существует множество расширений и усовершенствований для построения веб-приложений на Java Enterprise платформе. По этим причинам Spring приобрёл большую популярность и признаётся разработчиками как стратегически важный фреймворк.

Содержание

Структура

Spring — это не один какой-то конкретный фреймворк. Это общее название для целого ряда небольших фреймворков, каждый из которых выполняет свою работу.

У Spring модульная структура. Это позволяет подключать только те модули, которые нужны для нашего приложения и не подключать те, которыми заведомо не будем пользоваться. Именно этот подход и помог Spring обойти своего конкурента в то время (EJB) и захватить лидерство. [Источник 3] Данная структура показана на Рисунке 1.


Spring состоит из нескольких модулей:

Модуль data access содержит в себе средства для работы с данными (в основном, с базами данных), web — для работы в сети (в том числе и для создания веб-приложений).

Кроме того, есть еще так-называемая целая спринг-инфраструктура: множество других проектов, которые не входят в сам фреймворк официально, но при этом бесшовно интегрируются в ваш проект на спринге (например, тот же spring security для работы с авторизацией пользователей на сайте).

Компоненты Spring Framework

Spring - огромный фреймворк, так как создатели охватили практически все области Java-приложений. Отсюда следует, что существует большое количество составных частей у Spring Framework (Данная схема фреймворка показана на Рисунке 2.):

  • IoC (Inversion of Control) контейнер;
  • AOP-фреймворк (включая интеграцию с AspectJ);
  • Data Access фреймворк;
  • Transaction management;
  • MVC-фреймворк;
  • Remote Access фреймворк;
  • Batch processing;
  • Фреймворк аутентификации и авторизации;
  • Remote Management;
  • Messaging-фреймворк;
  • Testing-фреймворк.

DI/IoC

IoC (Inversion of Control) — инверсия управления. При использовании библиотеки вы сами прописываете в своем коде какой метод какого объекта вызвать, а в случает с фреймворками — чаще всего уже фреймворк будет вызывать в нужный ему момент тот код, который уже написали. То есть, тут уже не вы управляете процессом выполнения кода/программы, а фреймворк это делает за вас. Вы передали ему управление (инверсия управления).

Под DI(Dependency Injection) - внедрение зависимостей, это встраивание различных объектов в определённые классы.

Spring MVC

Ядро платформы, предоставляет базовые средства для создания приложений — управление компонентами (бинами, beans), внедрение зависимостей, MVC фреймворк, транзакции, базовый доступ к БД. В основном это низкоуровневые компоненты и абстракции. По сути, неявно используется всеми другими компонентами. Данный интерфейс изображен на Рисунке 3:


Spring Security

Spring Security это Java/JavaEE framework, предоставляющий механизмы построения систем аутентификации и авторизации, а также другие возможности обеспечения безопасности для корпоративных приложений, созданных с помощью Spring Framework. У Spring Security есть несколько характеристик: [Источник 4]

  • Авторизация и аутентификация;
  • доступ к данным, методам и т.п.;
  • OAuth;
  • LDAP;
  • куча разных провайдеров.

Spring Boot

Spring Boot позволяет избежать XML конфигурации, также настраивает ( т.е. приводит в порядок зависимости между компонентами) приложение, упаковывает его в исполняемый связующее звено, которое объединяет вместе набор компонентов в готовое приложение.

Функции Spring Boot:

  • Он не использует кодогенерацию. Из кода, который генерится, присутствует только метод main. Если вы ищете утилиту для генерации приложений — это скорее JHipster
  • Не использует XML для конфигурации. Все конфигурится через аннотации
  • Используются автоконфигурации по максимуму. Если у вас добавлена зависимость на Mongo, и не указано, куда подключаться — Boot попробует localhost:27017
  • Используется convention over configuration. Для большинства конфигураций не нужно ничего настраивать
  • Его легко отодвинуть в сторону и "перекрыть" конфигурацию по умолчанию. Например, если в настройках указать хост для подключения к Монго — он автоматически перекроет localhost

Преимущества Spring Framework

Считается, что Spring Framework реализует модель разработки, основанную на лучших стандартах индустрии, и делает её доступной во многих областях Java. Таким образом к достоинствам Spring можно отнести:

  1. Относительная легкость в изучении и применении фреймворка в разработке и поддержке приложения.
  2. Внедрение зависимостей (DI) и инверсия управления (IoC) позволяют писать независимые друг от друга компоненты, что дает преимущества в командной разработке, переносимости модулей и т.д..
  3. Spring IoC контейнер управляет жизненным циклом Spring Bean и настраивается наподобие JNDI lookup (поиска).
  4. Проект Spring содержит в себе множество подпроектов, которые затрагивают важные части создания софта, такие как веб сервисы, веб программирование, работа с базами данных, загрузка файлов, обработка ошибок и многое другое. Всё это настраивается в едином формате и упрощает поддержку приложения.

Аспектно-ориентированное программирование (Aspect Oriented Programming — AOP)

Аспектно-ориентированное программирование (АОП) — это одна из “моделей программирования текущего момента” в мире Java. АОП предоставляет возможность реализации сквозной логики — т.е. логики, которая применяется к множеству частей приложения — в одном месте и обеспечения автоматического применения этой логики по всему приложению. Подход Spring к АОП заключается в создании “динамических прокси” для целевых объектов и “привязывании” объектов к конфигурированному совету для выполнения сквозной логики.

Aspect, Advice, Pointcut, JointPoint и Advice Arguments в АОП

Существуют пункты, из которых состоит аспектно-ориентированное программирование: [Источник 5]

  • Точка соединения (joinpoint) — это четко определенная точка во время выполнения приложения. Типовые примеры точек соединения включают обращение к методу, собственно Method Invocation, инициализацию класса и создание экземпляра объекта. Точки соединения являются ключевой концепцией АОП и определяют места в приложении, в которые можно вставлять дополнительную логику с использованием АОП.
  • Советы (advice). Фрагмент кода, который должен выполняться в отдельной точке соединения, представляет собой совет (advice). Существует несколько типов советов, среди которых перед, когда совет выполняется до точки соединения, и после, когда совет выполняется после точки соединения. В ООП совет принимает форму метода внутри класса.
  • Срез (pointcut) — это коллекция точек соединения, которая используется для определения ситуации, когда совет должен быть выполнен. Создавая срезы, вы получаете точный контроль над тем, как применять совет к компонентам приложения. Как упоминалось ранее, типичной точкой соединения является Method Invocation. А типичный срез представляет собой коллекцию всех точек соединения Method Invocation в отдельном классе. Часто между срезами можно установить сложные отношения, чтобы обеспечить дополнительные ограничения на то, когда будет выполнен совет.
  • Аспект (aspect) — это комбинация совета и срезов. Такая комбинация дает в результате определение логики, которая должна быть включена в приложение, и указание мест, где она должна выполняться.
  • Связывание (weaving) представляет собой процесс действительной вставки аспектов в определенную точку кода приложения. Для решений АОП времени компиляции это делается на этапе компиляции, обычно в виде дополнительного шага процесса сборки. Аналогично, для решений АОП времени выполнения связывание происходит динамически во время выполнения. В AspectJ поддерживается еще один механизм связывания под названием связывание во время загрузки (load-time weaving — LTW), который перехватывает лежащий в основе загрузчик классов JVM и обеспечивает связывание с байт-кодом, когда он загружается загрузчиком классов.
  • Цель (target) — это объект, поток выполнения которого изменяется каким-то процессом АОП. На целевой объект часто ссылаются как на объект, снабженный советом.
  • Введение (introduction) представляет собой процесс, посредством которого можно изменить структуру объекта за счет введения в него дополнительных методов или полей. Введение можно использовать для обеспечения реализации любым объектом определенного интерфейса без необходимости в том, чтобы класс этого объекта реализовывал такой интерфейс явно.

Spring Bean

Термин бин в Spring используется для ссылки на любой компонент, управляемый контейнером. Обычно бины на определенном уровне придерживаются спецификации JavaBean, но это не обязательно особенно если для связывания бинов друг с другом планируется применять Constructor Injection. Для получения экземпляра бина используется ApplicationContext. IoC контейнер управляет жизненным циклом спринг бина, областью видимости и внедрением.

Scope у Spring Bean

В Spring предусмотрены различные области времени действия бинов:

Жизненный цикл Spring Bean

Жизненный цикл Spring бина — время существования класса. Spring бины инициализируются при инициализации Spring контейнера и происходит внедрение всех зависимостей. Когда контейнер уничтожается, то уничтожается и всё содержимое. Если нам необходимо задать какое-либо действие при инициализации и уничтожении бина, то нужно воспользоваться методами init() и destroy(). Для этого можно использовать аннотации @PostConstruct и @PreDestroy().

Spring для ленивых. Основы, базовые концепции и примеры с кодом. Часть 1 - 1

Многие люди после прочтения моих статей про создание заготовки для веб-проекта и про создание простенького веб-сервиса на сервлетах — интересовались когда я напишу и про Spring. Я не хотел, предлагал почитать книгу (и до сих пор говорю, что книга — это лучше чем 10, а то и 100 статей в интернете). Но сейчас вот решил, что объясняя одно и то же разным людям, я трачу больше времени, чем если бы один раз сел и написал статью, а потом просто кидал бы ссылочку на неё. Так что пишу ради ссылочки)). В этой статье я не буду писать как за 5 минут сделать работающий проект на спринге по моему примеру. Я напишу лишь о базовых вещах, без знания которых "запилить" проект конечно можно, но вот что там происходит, и, что важнее, почему — будет не понятно.

Что такое Spring Framework?

Spring Framework, или просто Spring — один из самых популярных фреймворков для создания веб-приложений на Java. Фреймворк — это что-то похожее на библиотеку (возможно этот термин вам более знаком), но есть один момент. Грубо говоря, используя библиотеку, вы просто создаете объекты классов, которые в ней есть, вызываете нужные вам методы, и таким образом получаете нужный вам результат. То есть, тут более императивный подход: вы четко указываете в своей программе в какой конкретный момент надо создать какой объект, в какой момент вызвать конкретный метод, итд. С фреймворками дела обстоят слегка иначе. Вы просто пишете какие-то свои классы, прописываете там какую-то часть логики, а создает объекты ваших классов и вызывает методы за вас уже сам фреймворк. Чаще всего, ваши классы имплементируют какие-то интерфейсы из фреймворка или наследуют какие-то классы из него, таким образом получая часть уже написанной за вас функциональности. Но не обязательно именно так. В спринге например стараются по максимуму отойти от такой жесткой связности (когда ваши классы напрямую зависят от каких-то классов/интерфейсов из этого фреймворка), и используют для этой цели аннотации. Дальше мы еще к этому моменту вернемся. Но важно понять, что спринг — это просто набор каких-то классов и интерфейсов, которые уже написаны за вас :) Еще хочу сразу отметить, что спринг можно использовать не только для веб-приложений, но и для так знакомых всем нам самых обычных консольных программок. И сегодня мы что-то такое даже напишем.

Структура

Но спринг — это не один какой-то конкретный фреймворк. Это скорее общее названия для целого ряда небольших фреймворков, каждый из которых выполняет какую-то свою работу.

Spring для ленивых. Основы, базовые концепции и примеры с кодом. Часть 1 - 2

  • data access;
  • web;
  • core;
  • и других.

Почему Spring в Java?

Ну кроме того, что это модно-стильно-молодежно, могу сразу сказать, что как только вы им хоть немного овладеете — вы поймете сколько всякой разной работы вам теперь не приходится делать, и сколько всего берет на себя Spring. Можно написать пару десятков строк конфигов, написать парочку классов — и получится работающий проект. Но как только начинаешь задумываться сколько там всего находится "под капотом", сколько работы выполняется, и сколько пришлось бы писать кода, если делать такой же проект на голых сервлетах или на сокетах и чистой Java — волосы встают дыбом :) Есть даже такое выражение, как "магия" Spring. Это когда ты видишь, что все работает, но ты примерно прикидываешь сколько там всего должно происходить чтобы все работало и как оно там все работает — то кажется, что происходит это все благодаря действительно какой-то магии)) Проще назвать это все магией, чем попытаться объяснить как оно там все взаимосвязано. :) Ну и второй аргумент "за" изучение Spring — это то, что в примерно 90% вакансий на джуна (по моим личным наблюдениям) — требуется либо знание, либо хотя бы общее представление о джентельменском наборе спринга из data , web-mvc и security :) Но сегодня только об основах.

DI/IoC

Если вы пытались что-то читать по спрингу, то первое с чем вы сталкивались — это наверное вот эти вот буковки: DI/IoC. Сейчас я вам очень рекомендую отвлечься от этой статьи и почитать вот эту статью на хабре! IoC (Inversion of Control) — инверсия управления. Об этом я уже вскользь упоминал, когда писал, что при использовании библиотеки вы сами прописываете в своем коде какой метод какого объекта вызвать, а в случает с фреймворками — чаще всего уже фреймворк будет вызывать в нужный ему момент тот код, который вы написали. То есть, тут уже не вы управляете процессом выполнения кода/программы, а фреймворк это делает за вас. Вы передали ему управление (инверсия управления). Под DI понимают то Dependency Inversion (инверсию зависимостей, то есть попытки не делать жестких связей между вашими модулями/классами, где один класс напрямую завязан на другой), то Dependency Injection (внедрение зависимостей, это когда объекты котиков создаете не вы в main-е и потом передаете их в свои методы, а за вас их создает спринг, а вы ему просто говорите что-то типа "хочу сюда получить котика" и он вам его передает в ваш метод). Мы чаще будем сталкиваться в дальнейших статьях со вторым.

Бины и контекст

Одно из ключевых понятий в спринге — это бин. По сути, это просто объект какого-то класса. Допустим, для нашей программы надо использовать 3 объекта: котика, собачку и попугайчика. И у нас есть куча классов с кучей методов, где иногда нам нужен для метода котик, а для другого метода — собачка, а иногда у нас будут методы, где нужен котик и попугайчик (например метод для кормежки котика, хе-хе), а в каких-то методах — все три объекта понадобятся. Да, мы можем в main-е сначала создать эти три объекта, а потом их передавать в наши классы, а уже изнутри классов — в нужные нам методы. И так по всей программе. А если еще и представить, что периодически мы захотим менять список принимаемых параметров для наших методов (ну решили переписать что-то или добавить функциональности) — то нам придется делать довольно много правок по коду если надо будет что-то поменять. А теперь если представить, что таких объектов у нас не 3, а 300? Как вариант, это собрать все наши такие объекты в какой-то один общий список объектов (List<Object>) и во все методы передавать его, а изнутри методов уже доставать тот или иной объект, который нам нужен. Но что если представить, что по ходу программы у нас в этот список может добавиться какой-то объект, или (что хуже) удалиться? Тогда во всех методах, где мы достаем объекты из списка по их индексу — все может поломаться. Тогда мы решаем хранить не список, а мапу, где ключом будет имя нужного нам объекта, а значением — сам объект, и тогда мы сможем из него доставать нужные нам объекты просто по их имени: get("попугайчик") и в ответ получили объект попугайчика. Или например ключ — это класс объекта, а значение — сам объект, тогда мы сможем указать уже не имя объекта, а просто класс нужного нам объекта, тоже удобно. Или даже написать какую-то обертку над мапой, где сделать методы, чтобы в каких-то случаях доставать объекты по их имени, а в других случаях — по классу. Вот это и получится у нас application context из спринга. Контекст — это набор бинов (объектов). Обращаясь к контексту — мы можем получить нужный нам бин (объект) по его имени например, или по его типу, или еще как-то. Кроме того, мы можем попросить спринг самого сходить поискать в своем контексте нужный нам бин и передать его в наш метод. Например, если у нас был такой метод: нам спринг когда вызывал этот метод — передавал в него объект нашего котика из своего контекста. Теперь мы решаем, что нашему методу кроме котика нужен еще и попугайчик. Используя спринг — для нас нет ничего проще! Мы просто пишем: и спринг, когда будет вызывать этот наш метод — сам поймет, что сюда надо передать котика и попугайчика, сходит к себе в контекст, достанет эти два объекта и передаст их в наш метод. Передав спрингу бразды правления нашей программой — мы так же переложили на него ответственность за создание объектов и передачу их в наши методы, которые он будет вызывать. Возникает вопрос: а как спринг будет знать какие объекты (бины) создавать?

поддержка различных фреймворков

Особенности Spring Framework

Вот некоторые наиболее важные особенности Spring Framework:

  • Предопределенные шаблоны
  • облегченный
  • Быстрое развитие
  • Мощная абстракция
  • Предлагает множество ресурсов
  • Декларативная поддержка
  • Предлагает комплексные инструменты

Краткая история

Вот важные ориентиры из истории:

  • Spring Framework был написан Родом Джонсоном и впервые выпущен в июне 2002 года.
  • Spring La с т версия выпуск в марте 2004 года
  • Версия Spring 1.2.6 выпущена в 2006 году
  • Выпуск версии Spring 2.0 в октябре 2006 г.
  • Выпуск версии Spring 2.5 в ноябре 2007 г.
  • Выпуск версии Spring 3 в декабре 2009 г.
  • Выпуск версии Spring 3.1 в декабре 2011 г.
  • Выпуск версии Spring Framework 4 в декабре 2013 года с поддержкой Java 8
  • Spring Framework 4.2.0 версия выпущена в июле 2015 года
  • Spring Framework 4.2.1 версия выпущена в сентябре 2015
  • Версия Spring Framework 4.3 выпущена 10 июня 2016 года
  • Spring Framework 5.0 версия выпущена в июне 2017 года

Spring Framework Architecture

Spring Framework предоставляет 20 модулей, которые можно использовать в зависимости от требований приложения.

Spring Framework предоставляет 20 модулей

Core и Bean обеспечивают фундаментальную часть платформы, включая IoC и DI.

Основной контейнер

Базовый контейнер дополнительно разделен на подкомпоненты, такие как модули Core, Beans, Context и Expression Language.

Давайте рассмотрим каждую из этих моделей в деталях:

Основной модуль обеспечивает все основные компоненты каркаса пружины. Включает функции IoC (Inversion of Control) и Inpension Injection.

Модуль предлагает BeanFactory, которая представляет собой сложную реализацию фабричного шаблона.

Context

Модуль Context основан на прочной основе, предоставляемой модулями Core и Beans, и является средой, которая помогает вам получить доступ к любым объектам, определенным и настроенным.

Языки весеннего выражения (SpEL):

Этот модуль предлагает язык выражений для изменения и запроса графов объектов во время выполнения.

Доступ к данным и интеграция:

Уровень доступа к данным и интеграции состоит из модулей JDBC, ORM, JDBC, OXM, JMS и Transaction.

Web: в этом модуле используются слушатели сервлетов и контекст веб-ориентированного приложения. Он также предлагает функцию веб-ориентированной интеграции и функциональность для загрузки файлов из нескольких частей.

Веб-сервлет: Этот модуль хранит реализацию на основе MVC для веб-приложений.

Web-Socket: модуль предлагает основанную на WebSocket и двустороннюю связь между клиентом и сервером в веб-приложениях.

Web-портлет: этот модуль также называется Spring-MVC-Portlet module. Он предлагает портлеты на основе Spring и копирует все функциональные возможности модуля Web-сервлетов.

AOP: язык AOP является полезным инструментом, который позволяет разработчикам добавлять корпоративные функциональные возможности в приложение.

Инструментарий: Этот модуль предлагает инструментарий класса и реализации загрузчика. Используется для конкретных серверов приложений.

Тест: Этот модуль поддерживает тестирование компонентов Spring с помощью инструментов TestNG или JUnit. Он предлагает последовательную загрузку Spring ApplicationContexts и кэширование этих контекстов.

Spring - MVC Framework

Spring Web MVC Framework предлагает архитектуру модель-представление-контроллер и предлагает компоненты, которые помогают вам быть гибкими и слабо связанными веб-приложениями.

Шаблон MVC позволяет разделять различные аспекты приложения, предлагая слабую связь между этими элементами. Spring MVC также помогает вам создавать гибкие и слабо связанные веб-приложения.

Дизайн MVC также позволяет разделить бизнес-логику, логику представления и логику навигации. Он также предлагает элегантное решение для использования MVC в Spring Framework с помощью DispatcherServlet.

Как работает MVC?

Как работает MVC

  • DispatcherServlet получает запрос.
  • После этого DispatcherServlet связывается с HandlerMapping. Он также отзывает контроллер, связанный с этим конкретным запросом.
  • Контроллер обрабатывает этот запрос, вызывая методы службы и объект ModelAndView, возвращаемый DispatcherServlet.
  • Имя представления отправляется ViewResolver для поиска фактического представления для вызова.
  • После этого DispatcherServlet передается в View для отображения результата.
  • Используя данные модели, представление рендерится и отправляет результат обратно пользователю.

Аспектно-ориентированное программирование

Аспектно-ориентированное программирование позволяет глобальным свойствам программы решать, как она компилируется в исполняемую программу.

Ключевой единицей модульности является аспект, а не класс. Аспектно-ориентированное программирование разбивает логику программы на различные части, известные как проблемы.

Межотраслевая проблема может затронуть все приложение и сосредоточена в одном месте в коде, таком как безопасность транзакций, управление, ведение журналов, аутентификация и т. д.

Аспектно-ориентированное программирование

Его также можно рассматривать как динамический шаблон оформления декоратора. Этот шаблон также предлагает дополнительное поведение, которое будет добавлено к существующему классу, оборачивая исходный класс и дублируя его интерфейс и удаляя исходный.

Основные концепции АОП

В Аспектно-ориентированном программировании есть семь основных концепций.

Основные концепции

Давайте обсудим их подробно:

Установка Java Spring

Вот пошаговая информация по установке Java Spring на ваш компьютер:

Шаг 2) Загрузите установщик Eclipse Neon и установите его в своей системе Windows.

Установка Java Spring

загрузка

Шаг 4) Перейдите в Eclipse IDE для разработчиков Java и нажмите на ссылку «64-bit».

64-bit

Шаг 5) Нажмите на ссылку «Windows 64-bit».

Windows 64-bit

Шаг 6) Нажмите на кнопку «Загрузить», чтобы загрузить ZIP-файл.

скачивание

Шаг 7) Распакуйте zip-файл для загрузки в определенную папку.

распаковка

выбор места

Шаг 9) Нажмите «Выбрать папку», чтобы выбрать папку.

выбор папки

Процесс будет отображаться, как показано на следующем экране.

процесс инсталяции

Шаг 10) Открытие клиента Eclipse Marketplace.

Eclipse Marketplace

Шаг 11) Поиск и установка плагина Spring.

установка плагина

Шаг 12) Подтвердите выбранные функции и нажмите кнопку «Подтвердить».

подтверждение

Шаг 13) Принятие условий и установка программного обеспечения.

принятие условий

Появится экран приветствия с ходом установки программного обеспечения.

экран приветствия

Учебное пособие по Spring Framework

Изучение

Несмотря на то, что Spring Framework часто забывают как устаревший, он по-прежнему остается популярным инструментом разработки приложений, которым пользуются корпоративные компании по всему миру. Spring предлагает беспрецедентный контроль, первоклассную безопасность и экономящую время систему зависимостей с использованием Spring Beans.

Тем не менее, Spring, как известно, труден для изучения из-за большого количества опций и сложного набора инструментов.

Сегодня мы поможем вам начать свой путь разработки Spring с учебника для начинающих о том, как и зачем использовать Spring. В конце концов, мы даже поможем вам начать работу над вашим первым весенним портфельным проектом.

Что такое Spring Framework?

Spring — это легкая среда разработки приложений с открытым исходным кодом, использующая Java Enterprise Edition (Java EE) и модель Enterprise JavaBeans (EJB).

Spring часто называют «фреймворком», потому что он поддерживает другие интегрированные фреймворки в экосистеме Java, такие как Struts, Hibernate и Tapestry. Spring поставляется во многих вариантах, которые адаптированы для конкретных целей, таких как Spring MVC, Spring Boot или Spring Security.

Spring известен своими системами внедрения зависимостей и инверсии управления (IoC), которые позволяют с легкостью создавать крупномасштабные слабосвязанные приложения. Spring особенно подходит для финансовых и корпоративных приложений благодаря своей скорости, безопасности и простоте построения транзакционных систем. Ведущими работодателями разработчиков Spring являются Citibank, eBay, Visa и JP Morgan.

В целом Spring Framework позволяет создавать приложения масштаба предприятия, которые являются безопасными и могут автоматически обрабатывать низкоуровневые функции, такие как поддержание жизненных циклов контейнеров и управление зависимостями.

Преимущества Spring

  • Обычный старый объект Java (POJO) : приложения Spring просто используют обычные объекты Java, а не серверы или корпоративные контейнеры. Это делает приложения более легкими.
  • Модульность IoC и MVC позволяют повторно использовать компоненты в вашем приложении без ручного управления зависимостями каждого из них.
  • Сильная поддержка экосистемы Java : Spring новаторски использует уже существующие технологии, такие как ORM-фреймворки, JEE и таймеры JDK.
  • Масштабируемые транзакции : Spring предлагает последовательный, масштабируемый интерфейс управления транзакциями как для локальных, так и для глобальных транзакций.
  • Это включает протоколы кеширования.
  • Безопасность : Простота внедрения модулей безопасности с функциями аутентификации и проверки.
  • Гибкие конфигурации : можно использовать аннотации на основе Java или конфигурацию XML.

Недостатки Spring

Многие из этих недостатков были устранены с помощью изобретения модуля Spring Boot, который очень самоуверен и предназначен для микросервисных архитектур.

Большинство современных Spring-приложений построены на Boot, но есть много старых приложений, которые все еще обслуживаются давними компаниями.

Особенности Spring

  • Инверсия управления (IoC) : перекладывает ответственность за зависимости с объектов на сам фреймворк. Без IoC каждый объект должен обрабатывать свой собственный экземпляр зависимости. В IoC объект просто указывает, что ему нужна определенная зависимость, и платформа настраивает и управляет ею автоматически. Это упрощает процесс разработки приложения за счет консолидации системы зависимостей и снижения нагрузки на отдельные классы.
  • Аспектно-ориентированное программирование : Spring AOP позволяет иметь разные загрузчики классов для повышения модульности и разделения сквозных проблем.
  • Внедрение зависимостей : процесс, который Spring использует для автоматического управления зависимостями bean-компонентов. Spring проверяет, какие bean-компоненты необходимы для работы конкретного bean-компонента, и внедряет их в качестве зависимости. Spring может выполнять внедрение зависимостей с помощью конструктора или метода установки.
  • Управление жизненным циклом контейнера : автоматическое создание, управление и настройка объектов приложения.
  • Поддержка MVC : поддерживает веб-архитектуру MVC, которая разделяет функциональные возможности между уровнями модели, представления и контроллера.
  • Обработка ошибок : включает обработку исключений JDBC с системой иерархии исключений.

Архитектура и компоненты Spring

Давайте разберем основные части приложения Spring Framework, чтобы помочь вам увидеть общую картину.

Beans

Spring Beans — это экземпляры классов, которыми управляет Spring. Они являются наиболее фундаментальным компонентом программы Spring.

Традиционно объекты создают личные экземпляры своих зависимостей. Spring управляет всеми зависимостями объекта и создает экземпляр объекта в bean-компоненте после внедрения необходимых зависимостей. @ComponentАннотаций является наиболее распространенным методом определения бобов.

У bean-компонентов есть установленный жизненный цикл и видимость в зависимости от их области действия. Существует шесть типов областей: синглтон, прототип, запрос, сеанс, приложение и веб-сокет. Одноэлементные и прототипные области могут использоваться в любом приложении, в то время как последние четыре области доступны только для веб-приложения.

Область видимости bean-компонента по умолчанию — singleton, в которой только один экземпляр bean-компонента создается и кэшируется в памяти. Несколько запросов к компоненту возвращают общую ссылку на один и тот же компонент. Напротив, область видимости прототипа приводит к созданию новых bean-компонентов всякий раз, когда запрос на bean-компонент выполняется в контексте приложения.

Autowiring

Метод Spring по внедрению бобов в одно и другое. Spring идентифицирует зависимость выбранного bean-компонента, ищет совпадение, а затем заполняет зависимость. @AutowiredАннотаций сообщает Spring, чтобы найти и внедрить сотрудничающий боб в другой. Если доступно более одного bean-компонента одного типа, Spring выдает ошибку.

В следующем сценарии Spring обнаруживает два bean-компонента типа Operator:

IoC Container

Контейнер IoC — это платформа, которая обеспечивает функциональность инверсии управления. Контейнер IoC управляет bean-компонентами и создает все необходимые экземпляры.

Например, у нас есть класс, Vehicleкоторый зависит от другого класса, Engine.

С IoC программисту нужно только упомянуть зависимость, а Spring сделает все остальное. Контейнер IoC будет создавать экземпляры обоих классов и внедрять Engineих Vehicleв качестве зависимости.

Модули Spring и проекты Spring

Модули — это наборы инструментов, сгруппированные по назначению. Разработчики могут указать, какие модули помимо базового набора они хотели бы импортировать в качестве зависимостей для любого конкретного приложения.

Модули организованы в группы, называемые проектами. Каждый проект содержит модули, которые предназначены для работы на определенной платформе или типе приложения. Системы проектов и модулей помогают сохранить вашу программу легкой, поскольку вы можете загружать только те инструменты, которые используются в приложении.

Модули базовой архитектуры Spring Project показаны ниже, сгруппированные по их слоям:

Модули базовой архитектуры Spring Project показаны ниже

Контейнер Spring Core включает 4 модуля, необходимых для использования Spring: Beans, Core, Context и Spring Expression Language (SpEL). Эти модули отвечают за основные функции среды Spring, такие как инверсия управления (IoC), внедрение зависимостей, интернационализация, а также за поддержку запросов к объекту во время выполнения.

Уровень доступа / интеграции Spring Data обеспечивает поддержку взаимодействия с базами данных и управления данными. Он состоит из 4 основных частей:

Веб-уровень содержит модули Веб, Сервлеты, Портлеты и Сокеты, используемые для создания веб-приложений.

Модуль Test обращается к сквозной проблеме модульного тестирования. Платформа Spring Test поддерживает тестирование с помощью JUnit, TestNG, а также создание фиктивных объектов для изолированного тестирования кода.

Модуль AOP предоставляет функции аспектно-ориентированного программирования, такие как перехват методов, pointcut, безопасность и функции ведения журнала. Spring имеет собственный модуль под названием Spring AOP, который предлагает базовые функциональные возможности аспектно-ориентированного программирования. Расширенная функциональность АОП может быть реализована за счет интеграции с AspectJ. АОП включает в себя комплексные проблемы бизнес-логики.

Помимо этого базового проекта, Spring включает проекты для всех основных вариантов использования. Эти проекты включают модули, которые слишком нишевые для базового проекта, но включают бесценные API-интерфейсы и функциональные возможности для целевого использования.

Например, Spring Cloud позволяет разрабатывать собственные облачные приложения, которые можно динамически настраивать и развертывать. Он предоставляет функциональные возможности для обработки общих шаблонов в распределенных системах. Другие проекты включают Spring Boot, Spring Security, Spring DAO, Spring Context и многие другие.

Начать работу с Spring

Теперь мы познакомим вас с вашим первым приложением Spring: простая система рекомендаций по фильмам. Настроить новый проект с помощью Spring Framework сложно, потому что вам нужно настроить полную архитектуру вручную, включая то, какие зависимости Apache Maven использовать, использовать ли XML или Java, и вы должны установить веб-сервер, такой как Tomcat.

Вместо этого мы будем использовать проект Spring Boot для автоматизации большей части процесса установки и использования его встроенного веб-сервера.

Как начать свой проект

Мы будем использовать Spring Initializr, чтобы быстро создать проект Spring Boot, используя его простое меню выбора. Сначала перейдите в start.spring.io. Вы найдете интерфейс меню, подобный приведенному ниже, с выбором настроек и полями метаданных.

Для этого проекта мы выберем «Maven Project»

После того, как вы все ввели, нажмите «Создать», чтобы создать zip-файл с архитектурой настройки. Разархивируйте папку в желаемое место на жестком диске. Эта папка будет содержать pom.xmlфайл для импорта в Eclipse IDE. Через короткое время вы увидите следующую иерархию:

  • src/main/java где будет написан код Java
  • src/main/resources где написаны свойства приложения
  • src/test/javaгде будут написаны тесты. Теперь вы можете щелкнуть правой кнопкой мыши MovieRecommenderSystemApplication.javaи запустить его как приложение Java, чтобы получить следующий вывод консоли.

Поздравляем, вы создали свое первое приложение Spring с помощью Spring Boot!

Добавление зависимостей

Теперь мы добавим простую реализацию рекомендателя фильмов с использованием системы зависимостей Spring. Программа примет название фильма в качестве входных данных и вернет три названия фильмов того же жанра. А пока мы жестко закодируем наш вывод, чтобы вы могли сосредоточиться на изучении структуры программы.

Сначала создайте новый класс в src/main/javanamed RecommenderImplementation.

Сначала создайте новый класс в srcmain

Затем мы добавим recommendMoviesметод в RecommenderImplementation. recommendMoviesМетод будет принимать строку заголовка фильма в качестве входных данных и возвращает три рекомендации в массиве String.

Используйте жестко запрограммированную реализацию ниже:

Теперь создайте экземпляр RecommenderImplementationкласса в MovieRecommenderSystemApplicationфайле, а затем вызовите recommendMoviesметод через RecommenderImplementationкласс.

А пока мы жестко запрограммируем getRecommendations возврат тех же трех фильмов.

Теперь мы можем использовать методы ContentBasedFilterкласса в RecommenderImplementationклассе. Замените предыдущую жестко запрограммированную реализацию recommendMoviesследующей реализацией на основе зависимостей.

Наконец, мы добавим toStringметод к mainметоду, чтобы сделать массив String доступным для чтения в качестве вывода.

Читайте также: