Инструменты разработчика на Java: Spring, Hibernate, MyBatis и другие
В статье наши Java-разработчики рассказали про основные фреймворки и библиотеки, которые пригодятся в работе как тем, кто только приступает к изучению языка или уже давно разрабатывает на нем.
Spring Framework / ярослав
Что это такое
Начнем с главного: что такое Spring Framework? Это сервер приложений, то есть платформа (фреймворк), на основе которой разрабатываются приложения и которая предоставляет интерфейс для взаимодействия с внешними ресурсами, повышая уровень абстракции. Это позволяет разработчику приложения не задумываться над техническими деталями и сфокусироваться только на бизнес-логике.
Простым языком: есть сервер приложений — с одной стороны он работает с БД, с другой с фронтом, по середине ваше приложение, которое с помощью удобного интерфейса получает запросы от фронта и что-то пишет/читает из БД.
В каком случае использовать
Spring больше подходит для небольших приложений или приложений на микросервисной архитектуре. Он относительно простой, сам по себе не требует серьезных мощностей для работы. При выборе также стоит ориентироваться на доступные модули.
Основное выгодное отличие Spring в том, что можно использовать библиотеку Spring Data. Это крутая абстракция над Hibernate, которая значительно упрощает жизнь разработчика: быстрее и удобнее аналогичных решений. К тому же у нее есть несколько киллер фич. Первая — управления транзакциями через аннотации и область видимости метода. Вторая — работа с БД через «репозитории», что позволяет за 5 минут создать интерфейс с правильно названными методами, а дальше Spring сгенерирует реализацию для CRUD-операций с данными.
Когда не подходит
При разработке больших монолитных приложений. В таком случае лучше использовать JakartaEE, о котором я расскажу дальше.
Альтернативы
Помимо Spring есть и другие сервера приложений. Например, WildFly от RedHat, WebSphere от IBM, GlassFish, поддерживаемый Oracle, и тому подобное. Их всех можно поделить на сам Spring и реализации JakartaEE.
JakartaEE — это спецификация, которая дает архитектурные рекомендации по тому, как осуществлять взаимодействия приложения, например, с БД. Spring тоже можно косвенно отнести к одной из таких реализаций, но он реализует те же вещи по-своему, далеко не всегда следуя этим рекомендациям.
Советы в работе
В работе с Spring я бы посоветовал использовать Spring Boot. Это автоконфигурация для Spring, которая позволяет буквально в 3 клика запустить приложение без дополнительных настроек. Если нужно, она с легкостью перекрывается ручной конфигурацией, поэтому дилеммы «использовать или нет» не возникает.
Если вы хотите изучить все тонкости работы с фреймворком, рекомендуем наш курс разработки на Spring. Старт занятий 20 сентября, обучение бесплатное. Программа и регистрация по ссылке.
Hibernate / Иван
Что это такое
Hibernate — библиотека для Java, предназначенная для решение задач объектно-реляционного отображения. В своем начальном выпуске, в раннем 2001 году, Hibernate решал задачи ORM фреймворка, не имея даже реализации такого инструмента как Criteria API. Как бы то ни было Hibernate является реализацией спецификации JPA, которая в свою очередь является частью набора спецификаций Java EE (в современной манере Jakarta EE).
На текущее время, Hibernate решает не только задачи объектно-реляционного отображения (как и от SQL к Java-типам, так и наоборот), но и расширяет множество иных возможностей. Например:
- Использование в приложениях с Java SE, Jakarta EE, Enterprise OSGi;
- Доступность и легкость описания сущностей, связанных с таблицами в ООП стилистике;
- Возможность использования наследования, полиморфизма, абстракции и инкапсуляции, а также коллекций и так далее без необходимости что-то дополнительно подключать и настраивать:
- Высокая продуктивность. Поддержка так называемой «ленивой» инициализации, множество иных стратегий выборки данных, поддержка блокировок, автоматического версионирования и генерации временных меток;
- Масштабируемость. Позволяет безболезненно применяться в кластере серверов, в случае расширения архитектуры и так далее.
В каком случае использовать
В основе своей для разработчика Hibernate решает проблему рутинного описания собственной логики работы с SQL, однако при всем при этом, он не ограничивает вас от использования всех мощностей SQL.
Hibernate прекрасно подходит для использования в бизнес-слое приложения, избавляя от необходимости использования хранимых процедур или написания нативного SQL. Поддерживает автоматический маппинг и генерацию сущностей (Entity), представляющих собой объектное отображение реляционных таблиц. Собственно, Hibernate может применяться не только для для реляционных СУБД, но и NoSQL.
Так называемый Hibernate OGM (Object/Grid Maper — инструмент для работы с NoSQL базами) может применятся с такими NoSQL, как Cassandra, CouchDB, EhCache, Apache Ignite, и даже Redis. В том случае, если вы используете Spring Framework, он предоставляет возможность использовать Spring Data для NoSQL (Spring Data Redis, Mongo, Cassandra и другие).
Как и следует ожидать, доступ к NoSQL-базам данных осуществляется с помощью все тех же инструментов, что и с реляционными базами — в них входит концепция «репозиторий» и derived query. Однако следует учитывать, что применять JPA-концепции, относящиеся к принципам работы с реляционными СУБД, на концепцию NoSQL — очень ресурсозатратно и не всегда оправдывает такую необходимость.
Часто NoSQL применяют для быстрых и легковесных операций в том числе и распределенных операций, в таких случая важна скорость работы, чего JPA-спецификация не может гарантировать для работы с NoSQL-базами данных ввиду ее специфики (потому как JPA specification написана исключительно для реляционных СУБД — RDBMS). В первую очередь, инструменты подобные Hibernate OGM и Spring Data предназначены для удобства разработки и легкого перехода с одной базы данных на другую, даже если этот переход с SQL на NoSQL. Более подробнее ознакомиться с семейством Spring Data можно на их сайте.
Помимо всего прочего, часто Hibernate используют в связке с Spring Data JPA, понятное дело, если ваш проект — это spring-приложение. Это очень удобная и сильная связка. Spring Data JPA представляет собой слой абстракции базы данных, при этом предоставляет инструменты генерации запросов по имени метода (derived query), применяя концепцию «репозиторий» вместо устаревшей «DAO». Со стороны Spring Data JPA применяются различного рода «репозитории» — интерфейсы, предоставляющие базовые методы работы с БД, derived query, modifying query, JPQL, Criteria Api динамическое построение запросов и их выполнение в рантайме (runtime), в довесок к ним Hibernate предоставляет свой язык написания запросов HQL, а также Entity Graphs, инструменты работы с транзакциями и так далее. Так что их связка — это сила и мощь классической разработки.
Когда не подходит
Как было сказано выше, Hibernate решает проблему рутинного описания, и ORM-отображения. Отбросив весь пафос в сторону, скажем прямо, Hibernate за вас формирует запросы к базе. И так иногда получается, что запросы эти, прямо скажем, не очень. Часто возникают проблема из-за незнания специфик работы фреймворка, появляются просадки в скорости работы приложения, и хуже того, утечки памяти (например, известная проблема Eager fetch).
Так что, если вам важна скорость работы с базой, Hibernate станет не всегда вашим выбором, с учетом его persistence context, L2 cache, transaction assistance и прочими удобствами и излишествами.
Альтернативы
В качестве альтернатив можно привести безусловно MyBatis, EclipseLink, DataNucleus, iBATIS. Так или иначе, выбор инструмента зависит от вас и ваших потребностей. Можете хоть на чистом JDBC писать. Кстати, вот один из примеров, где Hibernate не может использоваться — всем известный и модно-молодежный ClickHouse не может взаимодействовать с Hibernate. Да и в общем-то, ClickHouse только с Native JDBC и работает, а лепят его, куда попало.
Советы в работе
Однозначно современный Hibernate настраивается чуть ли не из коробки: подключил и радуйся. Но, приступая к работе, важно понимать — это огромный монолит, который развивался на протяжении 20-ти лет, и следует отнестись к нему уважительно и почтить его хотя бы чтением спецификации JPA.
Необходимо знать принципы работы транзакций, ACID-принципы, принципы построения запросов внутри Hibernate, каким образом он взаимодействует с БД, что такое persistence context, что такое проблема n+1 и все вот это вот. Да и не мешало бы хоть немного знать сам SQL.
MyBatis / Ангелина
Что это такое
MyBatis — это фреймворк для взаимодействия с базой данных в Java-приложении. В отличие от своих альтернатив (например, Hibernate), он не реализует спецификации JPA. Также отличается сам маппинг объектов: например, Hibernate представляет таблицы в виде сущностей и при запросе к базе данных сам генерирует SQL-запрос, MyBatis же мапится не на таблицы, а на SQL-запросы.
Для начала работы с MyBatis необходимо определить объект интерфейс-маппер и xml-документ с описанием маппинга, где указывается SQL-запрос и типы получаемых и возвращаемых данных. MyBatis преобразует вызов метода интерфейса в запрос к базе, а результат запроса преобразуется в результат метода. Xml-файл маппинга помимо описания запроса может содержать логику используя компоненты: if, when, where, foreach и др. Вместо xml-файла MyBatis также поддерживает специальные аннотации:
- @Insert, @Select, @Update, @Delete (sql-запрос, который должен быть выполнен при вызове метода, обозначенного одной из этих аннотаций);
- @Param (указание параметров запроса);
- @Result и @Results (описывают результат запроса, который должен вернуться после вызова);
- @One и @Many (описание связей между таблицами, сопоставляя объект с коллекцией, объект с объектом).
MyBatis не умеет создавать схемы, а работает с уже существующими таблицами. При правильном подходе MyBatis может значительно увеличить скорость работы проекта в части взаимодействия с БД.
В каком случае использовать
При разработке стоит отдать преимущество MyBatis, в случаях:
- Если в приложении используются сложные запросы и связи;
- Когда в приложении имеется достаточно много различных сложных выборок из нескольких таблиц;
- Если в приложении в основном происходит работа с хранимыми процедурами;
- Если возникает необходимость написать свой ORM;
Также MyBatis более удобен в случае использования ненормализованной базы данных.
Когда не подходит
- Если в проекте много простых сущностей без сложных связей;
- Если использование автоматического генерирования запросов к базе оправдано;
- Если есть необходимость в создании и изменении схемы.
Альтернативы
Основной альтернативой является, конечно же, Hibernate. Также можно назвать:
- Ebean — ORM-фреймворк, который как и MyBatis прост и понятен в изучении. Сущности описываются знакомыми аннотациями JPA, а запросы к БД выполняются посредством вызова методов объекта Ebean.
- EclipseLink — эталонная реализация JPA, во многом схожая с Hibernate. Помимо JPA EclipseLink поддерживает ряд других стандартов и имеет особенности, которых нет в Hibernate (например, аннотации @Struct и @ReadOnly).
- Reladomo — также ORM-фреймворк, ключевая особенность которого состоит в генерации Java-классов из xml-описания структуры БД. Взаимодействие с БД происходит посредством вызова методов сгенерированных классов.
- Apache Cayenne — среда, которая позволяет генерировать ORM-объекты с помощью программы-конструктора. Создание, удаление, сохранение объектов в БД и более сложные запросы, происходят с помощью вызова методов класса DataContext.
Советы в работе
JSF / Павел
Что это такое
JSF (Java Server Faces) — это Java-фреймворк, который предназначен для разработки веб-интерфейсов пользователя. JSF позволяет проектировать пользовательский интерфейс на основе повторно используемых компонентов. Разработчик пишет xhtml-шаблоны, в которых при помощи специального языка скриптов может обращаться к атрибутам java-объектов. Шаблоны состоят из переиспользуемых компонентов, JSF из коробки предоставляет богатую библиотеку таких компонентов, но также есть возможность разрабатывать свои.
Основные преимущества JSF:
- упрощает формирование пользовательского интерфейса за счет набора повторно используемых компонентов пользовательского интерфейса;
- упрощает передачу данных приложения в пользовательский интерфейс и из него;
- помогает управлять состоянием пользовательского интерфейса при запросах к серверу;
- предоставляет простую модель установления связи между созданными клиентом событиями и кодом приложения на стороне сервера;
- упрощает повторное использование компонентов пользовательского интерфейса.
В каком случае использовать
JSF и фреймворки, базирующиеся на JSF (например, PrimeFaces и MyFaces), обычно используются в ситуации, когда необходимо реализовать монолит на Java, где и бизнес-логика, и представление пользователя будет в одном приложении. Такие ситуации возникают, когда невозможно или нет необходимости разрабатывать отдельное frontend-приложение для взаимодействия с пользователем. Обычно это корпоративные порталы, где красота интерфейса не так важна, а важнее функциональность, надежность и сопровождаемость.
Использование JSF предполагает использование готовых компонентов, поэтому позволяет относительно просто реализовывать сложные интерфейсные вещи — диаграммы, графики, интерактивные таблицы. Реализовать подобное при помощи JS-фреймворков будет сложнее как с точки зрения взаимодействия с бэкендом, так и с точки зрения реализации на фронтенде. Бэкенд и фронтенд в данном случае пишется одной командой разработчиков, приложение работает на одном сервере приложений и изменения в бизнес-логике и в пользовательском интерфейсе реализуются и выпускаются согласовано.
В основном, JSF используется при разработке корпоративных и государственных порталов. Также JSF используется в рамках стека технологий Oracle ADF, следовательно, JSF используется на портале поддержки Oracle и web-интерфейсы Oracle BPM Suite.
Когда не подходит
Фреймворк не подходит в тех случаях, когда бэкенд разрабатывается по принципу микросервисной архитектуры, и на стороне фронтенда нет необходимости реализовывать сложные статистические или табличные представления. Также в случае, когда пользовательское представление не перегружено элементами и не предполагает повторное использование множества компонентов.
Альтернативы
Основная альтернатива — не использовать JSF вовсе, а писать полноценное фронтенд-приложение.
Если речь идет о монолите на Java, то в качестве альтернатив будут выступать фреймворки PrimeFaces и MyFaces, которые сами основываются на JSF и предоставляют дополнительные библиотеки JSF-компонентов. Также есть вариант разработки приложения при помощи фреймворка Play.
Советы в работе
Самое главное, разобраться с жизненным циклом запроса, без этого использование JSF будет неэффективным. Может так получиться, что какие-то сложные вычисления или запросы в БД будут выполняться после обновления каждого элемента страницы.
Необходимо строго придерживаться паттерна MVC и четко разделять бизнес-логику и логику отображения — в противном случае код будет очень тяжело сопровождать в дальнейшем. Также необходимо определиться с одной библиотекой тегов и использовать только ее.
PrimeFaces / Ярослав
Что это такое
PrimeFaces — это OpenSource-библиотека компонентов для приложения на основе JSF, о котором уже говорили выше. PrimeFaces дополняет стандартный набор компонентов JSF, из которых можно собрать простой фронт для приложения.
В каком случае использовать
PrimeFaces хорошо подходит для создания простого UI с выводом информации в графики, таблицы и так далее. Например, для создания админок, новостных сайтов или страничек статистики.
У библиотеки есть отличный сайт — на нем можно посмотреть примеры того, что может получится с использованием этого фреймворка. А на этой странице можно узнать, какие компании используют PrimeFaces.
Когда не подходит
PrimeFaces не поможет, когда требуется создать сложный специфический фронт с множеством разнообразных интерактивных элементов. С наращиванием функционала код будет становится очень сложным для поддерживания. В таком случае вместо JSF лучше использовать JS-фреймворки (Angular или React). Тогда разработка UI уходит на фронт, а бэк превращается в RESTful-приложение.
Если требуется генератор простого html (например, для генерации email сообщения), то лучше посмотреть в сторону генераторов шаблонов. Они легче, проще и лучше подойдут для такой задачи.
Альтернативы
У PrimeFaces есть несколько альтернатив. Одни из них — набор похожих по смыслу библиотек (IceFaces, RichFaces и так далее). Они все также являются дополнениями к JSF и содержат набор готовых компонентов. Тем не менее, я бы рекомендовал использовать PrimeFaces, потому что он единственный, кто все еще получает обновления.
Есть еще альтернативы среди генераторов шаблонов (Thymeleaf, Mustache), но это скорее альтернатива JSF, а не PrimeFaces.
Советы в работе
Использовать тот фреймворк, который подходит под конкретно вашу задачу. И если выбор встает из того, выбрать ли PrimeFaces или RichFaces, Thymeleaf или Mustache, а четкого перевеса в сторону одного из решений нет, то можно выбрать то, что лучше знаешь и больше нравится 🙂
В итоге
Итак, вот основные фреймворки и библиотеки, которые пригодятся в работе программиста на Java — Spring Framework, Hibernate, MyBatis, JSF и PrimeFaces.
Spring Framework — это фреймворк, на основе которого разрабатываются приложения. Лучше всего подходит для небольших приложений или приложений на микросервисной архитектуре. Основной альтернативой является JakartaEE (WildFly, WebSphere, GlassFish).
Hibernate — библиотека для Java, предназначенная для связывания ООП и реляционной базы данных. Hibernate прекрасно подходит для использования в бизнес-слое приложения, избавляя от необходимости использования хранимых процедур или написания нативного SQL. В качестве альтернатив можно привести MyBatis, EclipseLink, DataNucleus, iBATIS.
MyBatis — это фреймворк для взаимодействия с базой данных в Java-приложении. С ним работают в тех случаях, когда в приложении используются сложные запросы и связи, имеется достаточно много различных сложных выборок из нескольких таблиц, происходит работа с хранимыми процедурами или возникает необходимость написать свой ORM. Основной альтернативой является Hibernate.
JSF — это Java-фреймворк, который предназначен для разработки веб-интерфейсов пользователя. JSF позволяет проектировать пользовательский интерфейс на основе повторно используемых компонентов. Основная альтернатива — не использовать JSF вовсе, а писать полноценное фронтенд-приложение.
PrimeFaces — это OpenSource-библиотека компонентов для приложения на основе JSF. PrimeFaces хорошо подходит для создания простого UI с выводом информации в графики, таблицы и тому подобное. Альтернатива — набор похожих по смыслу библиотек (IceFaces, RichFaces и тому подобное).
Этот список был составлен на основе опыта наших программистов. Так что кроме перечисленных здесь инструментов, существует еще много других фреймворков и библиотек, которые могут пригодиться в вашей работе.
Изучайте, программируйте и ищите новые 🙂
Использование фреймворков семейства Spring Projects для разработки веб-приложений на платформе Java Текст научной статьи по специальности «Компьютерные и информационные науки»
веб-приложение / платформа Java / аннотации Java / фреймворк / Spring Projects / Spring Frame¬work / архитектура MVC / web application / Java platform / Java annotation / framework / Spring Projects / Spring Framework / MVC architecture.
Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Сакович В. В., Кожомбердиева Г. И., Бураков Д. П.
Обсуждаются особенности разработки веб-приложений на платформе Java с использованием фреймворков семейства Spring Projects . Рассматриваются основные концепции Spring Framework : IoC-контейнер, Spring Scopes, Spring MVC и Spring AOP. Освещаются возможности, предоставляемые Spring Boot: запуск приложения, профили, конфигурационные файлы. Кроме того, уделяется внимание организации взаимодействия с базами данных с помощью Spring Data, а также использованию средств авторизации, предоставляемых Spring Security. В качестве демонстрационного примера веб-приложения, разработанного с использованием Spring, представлено клиент-серверное приложение для записи студентов на консультации и управления консультациями.
i Надоели баннеры? Вы всегда можете отключить рекламу.
Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Сакович В. В., Кожомбердиева Г. И., Бураков Д. П.
СОВРЕМЕННЫЕ ФРЕЙМВОРКИ ДЛЯ РАЗРАБОТКИ WEB-ПРИЛОЖЕНИЙ
Разработка веб — приложения с использованием Spring Framework и jQuery
РЕАЛИЗАЦИЯ ВЕБ СЕРВИСА С ПРИМЕНЕНИЕМ ПАРАДИГМЫ РЕАКТИВНОГО ПРОГРАММИРОВАНИЯ
СРАВНИТЕЛЬНЫЙ АНАЛИЗ ТЕХНОЛОГИЙ ДЛЯ РАЗРАБОТКИ СЕРВЕРНОЙ ЧАСТИ СИСТЕМЫ УПРАВЛЕНИЯ ПРОДАЖАМИ
SPRING FRAMEWORK В ВЫСОКОНАГРУЖЕННЫХ ПРИЛОЖЕНИЯХ
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.
Using Spring Projects Family Frameworks for Developing Web Applications on Java Platform
The article discusses the features of developing web applications on the Java platform using frameworks from the Spring Projects family. The basic concepts of the Spring Framework are considered: IoC container, Spring Scopes, Spring MVC, and Spring AOP. The possibilities provided by the Spring Boot are covered: application launch, profiles, and configuration files. In addition, attention is paid to the organization of interaction with databases using the Spring Data as well as using of authorization tools provided by the Spring Security. As a demo of a web application developed using the Spring features, the article provides a client server application for signing up students for a consultation and consultation management.
Текст научной работы на тему «Использование фреймворков семейства Spring Projects для разработки веб-приложений на платформе Java»
Использование фреймворков семейства Spring Projects для разработки веб-приложений
на платформе Java
В. В. Сакович, к.т.н. Г. И. Кожомбердиева Петербургский государственный университет путей сообщения Императора Александра I
Санкт-Петербург, Россия lampirg 1@gmail. com, kgi-liizht@yandex. ru
Аннотация. Обсуждаются особенности разработки веб-приложений на платформе Java с использованием фреймворков семейства Spring Projects. Рассматриваются основные концепции Spring Framework: IoC-контейнер, Spring Scopes, Spring MVC и Spring AOP. Освещаются возможности, предоставляемые Spring Boot: запуск приложения, профили, конфигурационные файлы. Кроме того, уделяется внимание организации взаимодействия с базами данных с помощью Spring Data, а также использованию средств авторизации, предоставляемых Spring Security. В качестве демонстрационного примера веб-приложения, разработанного с использованием Spring, представлено клиент-серверное приложение для записи студентов на консультации и управления консультациями.
Ключевые слова: веб-приложение, платформа Java, аннотации Java, фреймворк, Spring Projects, Spring Framework, архитектура MVC.
Широкое распространение веб-приложения получили в начале 2000-х годов в условиях бурного развития сети Интернет и гипертекстовой системы WWW [1]. Вследствие этого в области программной инженерии было выделено даже отдельное направление — веб-программирование, то есть разработка использующих веб-технологии информационных систем, представляющих собой полноценные веб-приложения, или частей этих систем, использующих вебстраницы для представления пользовательского интерфейса.
В настоящей статье рассматриваются особенности использования семейства фреймворков Spring Projects при разработке веб-приложений на платформе Java.
В качестве примера представлено демонстрационное приложение, функциональность которого ориентирована на решение практически значимой в вузовской среде задачи записи студентов на консультации и управления консультациями, а реализация — на показательное применение возможностей и преимуществ семейства фреймворков Spring Projects.
Статья содержит результаты выпускной квалификационной бакалаврской работы В. В. Саковича. Описание фреймворков семейства Spring Projects сопровождается отсылками к конкретным примерам их использования при разработке демонстрационного приложения. Приложение разработано в интегрированной среде разработки IntelliJ IDEA (с использованием в качестве дополнительных инструментов веб-приложения Spring Initializr и средства для
к.т.н. Д. П. Бураков независимый исследователь Санкт-Петербург, Россия burakovdmitry8@gmail.com
сборки проекта Maven) и может рассматриваться как действующий прототип реальной системы.
Веб-приложения и средства их разработки По своей структуре веб-приложения представляют собой приложения, построенные в соответствии с архитектурой «клиент-сервер». Структура типичного приложения представлена на рисунке 1 [2].
Рис. 1. Структура веб-приложения
Отличительной чертой веб-приложений является то, что клиентская часть выполняется в стандартном веб-браузере, причем клиентская и серверная части могут работать на разных операционных системах, то есть веб-приложения являются межплатформенными службами.
Клиентская часть веб-приложения реализует пользовательский интерфейс, формирует запросы к серверной части приложения и обрабатывает ответы от нее. Серверная часть получает запрос от клиента, выполняет вычисления, после этого формирует веб-страницу и отправляет ее клиенту по сети с использованием протокола HTTP. При этом серверная часть веб-приложения может выступать в качестве клиента других служб, например сервера базы данных или другого веб-приложения, расположенного на другом сервере.
Поскольку веб-приложения состоят из серверной и клиентской части, в веб-программировании выделяется программирование клиентской части, выполняемой непосредственно в браузере, и программирование серверной части, работающей на стороне веб-сервера. Для реализации как клиентской, так и серверной части могут быть использованы различные технологии по усмотрению разработчика или организации, внедряющей веб-приложение. Так, для реализации клиентской части, помимо языка разметки
HTML, активно используются таблицы стилей CSS и скриптовый язык JavaScript. На серверной стороне веб-приложений в основном применяются средства динамической генерации веб-страниц, например широко известный скриптовый язык PHP. Однако для разработки корпоративных веб-приложений, отличающихся, как правило, сложной структурой и разнообразием сервисов, предоставляемых конечным пользователям, применяются решения, основанные на использовании таких универсальных языков программирования, как Java.
Будучи высокоуровневым кроссплатформенным языком, язык Java используется во многих областях разработки программного обеспечения. При этом в стандартной редакции платформы Java (Java SE) не предусмотрены средства для удобной реализации серверных приложений. Для решения этой проблемы разработчиками Java была создана редакция платформы для разработки корпоративных систем Java EE (Java Platform, Enterprise Edition), включившая в себя такие технологии разработки серверной части веб-приложений, как JSP (Java Sever Pages) и сервлеты. Однако, ввиду того, что Java EE (с 2018 года — Jakarta EE) развивалась довольно медленно, а ее функциональность была относительно низкоуровневой, существовал запрос на альтернативные средства разработки серверных приложений, которые, использовав созданные в Java EE спецификации, позволяли бы создавать негромоздкие, легко масштабируемые, высокоуровневые веб-приложения.
Такой альтернативой стало семейство фреймворков Spring, существенно упростившее создание приложений и вследствие этого завоевавшее популярность среди разработчиков [3]. Данное семейство фреймворков является одним из самых востребованных средств для разработки веб-приложений [4], которое используется в таких компаниях, как Amazon, Google, Microsoft, Netflix и многих других [5].
Использование фреймворков как программных платформ, определяющих структуру разрабатываемой прикладной программной системы, облегчает разработку и объединение различных компонентов большого программного проекта. Как правило, облегчение разработки сложных систем достигается за счет использования каркасного подхода, при котором любая конфигурация программы строится на основе постоянной части, то есть каркаса, не зависящего от конфигурации и несущего в себе «гнезда», к которым подключаются сменные модули или точки расширения каркаса, определяющие специфическую функциональность разрабатываемой системы.
Семейство фреймворков Spring Projects
Изначально под термином Spring подразумевался только Spring Framework — фреймворк с открытым исходным кодом для Java-платформы, появившийся в середине 2000-х годов как альтернатива технологии Enterprise JavaBeans, которая поддерживает разработку серверных компонентов с бизнес-логикой и является частью Java EE. Однако по мере развития этого фреймворка на его основе сформировались новые фреймворки, которые образовали расширенное семейство Spring Projects [6]. Некоторые фреймворки данного семейства представлены на рисунке 2 [7].
Отметим фреймворки семейства, представляющие наибольший интерес в рамках настоящей статьи:
Рис. 2. Семейство фреймворков Spring Projects
• Spring Framework — основной фреймворк, использующийся во всех Spring-приложениях, предназначенный для управления ходом функционирования программы;
• Spring Boot — фреймворк, позволяющий быстро создавать и настраивать полноценные и готовые к запуску приложения, основанные на Spring;
• Spring Data — фреймворк для работы с базами данных, работающий с JDBC, JPA, а также NoSQL СУБД (например, MongoDB);
• Spring Security — фреймворк, предоставляющий средства для авторизации и аутентификации, а также базовую защиту от злоумышленных операций.
Для быстрой генерации каркасного проекта приложения, использующего фреймворки семейства Spring Projects, предназначен специальный инструмент — веб-приложение Spring Initializr [8]. Оно позволяет пользователю выбрать инструментальное средство для сборки проекта (например, Maven), версию Spring Boot, версию платформы Java, а также используемые средства семейства Spring Projects (и некоторых других инструментов). На основе выбранных пунктов меню и введенной информации Spring Initializr генерирует готовый zip-архив каркасного проекта приложения.
Возможности фреймворка Spring Framework
Рассмотрим полезные возможности Spring Framework, поддерживаемые ядром и внутренними пакетами этого основного фреймворка семейства. Описание средств, предоставляемых Spring Framework, сопровождается отсылками к примерам их использования В. В. Саковичем при разработке демонстрационного приложения.
Внедрение зависимостей IoC-контейнером
В решениях семейства Spring Projects активно применяется так называемая инверсия управления (Inversion of Control, IoC), которая также иногда называется внедрением зависимостей (Dependency Injection, DI). Это шаблон проектирования, при использовании которого зависимости экземпляров класса (то есть объекты, с которыми они взаимодействуют) определяются на основе аргументов конструктора (или метода, создающего экземпляр класса), а также полей объекта, значение которых определяется уже после создания экземпляра класса.
Внедрением зависимостей после создания экземпляра в Spring Framework занимается так называемый IoC-контейнер. IoC-контейнер представляет собой объект типа интерфейса BeanFactory. Как правило, при этом данный
объект создается на основе класса, реализующего производный интерфейс ApplicationContext. Например, в веб-приложениях используется автоматически создаваемый фреймворком Spring Boot экземпляр класса AnnotationConfigServletWebServerApplicationContext. При внедрении зависимостей Spring использует имеющийся в Java механизм рефлексии, в частности, активно применяются аннотации, опрашиваемые при выполнении приложения с помощью рефлексии [9].
Объекты, которые настраивает и внедряет IoC-контейнер, называются Spring bean-компонентами. Объявить Spring bean можно либо пометив его класс аннотацией @Component, либо использовав метод, помеченный аннотацией @Bean в классе, помеченным аннотацией @Configuration, либо используя xml-файлы [10]. Например, экземпляру класса NotificationAspect (который в демонстрационном приложении используется при формировании уведомления для отправки по электронной почте) для выполнения функций требуется объект типа интерфейса EmailService. Для этого классы, реализующие данный интерфейс, помечены аннотацией @Component. Во время выполнения программы IoC-контейнер создаст экземпляр класса, реализующего интерфейс EmailService и передаст его в качестве аргумента конструктору при создании экземпляра класса NotificationAspect.
Области применения Spring Scopes
Каждый объект Spring bean имеет свою область применения (scope), причем Spring Framework поддерживает шесть основных областей применения:
• singleton — на протяжении всей работы приложения существует только один Spring bean данного класса (выбирается по умолчанию);
• prototype — для каждого использующего его объекта внедряется свой Spring bean;
• request — для каждого HTTP-запроса создается свой Spring bean;
• session — для каждой сессии создается свой Spring bean;
• application — для каждого объекта типа интерфейса ServletContext создается свой Spring bean;
• websocket — для каждого объекта типа интерфейса WebSocket создается свой Spring bean.
Для приписывания области применения объекту Spring bean, необходимо применить аннотацию @Scope к классу, помеченному аннотацией @Component или методу, помеченному аннотацией @Bean. В качестве значения члена аннотации передается название области применения.
Для применения большинства областей scope фреймворку Spring необходимо использование прокси (объекта-посредника). Тип используемого прокси (на основе интерфейсов или на основе классов) также указывается в значении члена аннотации [11].
В качестве примера использования настройки области применения в демонстрационном приложении можно привести класс TeacherController, который содержит поле типа ConsultationPatternListWrapper, предназначенного для хранения данных об одном пользователе-преподавателе на протяжении нескольких запросов. Для этого используется область применения session и прокси на основе классов.
Архитектура Spring MVC
Spring Framework содержит два внутренних фреймворка для создания веб-приложений: Spring MVC и Spring WebFlux (предназначенный для реактивного веб-программирования).
Spring MVC основан на сервлете DispatcherServlet, который обрабатывает запросы, делегируя функции соответствующим компонентам Spring bean.
Архитектура MVC (Model-View-Controller), применяемая при проектировании программного обеспечения, представлена на рисунке 3 [12]. Она основана на взаимодействии трех типов компонентов [13]:
• Model (модель) содержит изменяемые данные, которые обновляет контроллер и которые передаются представлению;
• View (представление, вид) отвечает за отображение данных модели пользователю;
• Controller (контроллер) управляет моделью и отображением на основе входных данных.
Defines data structure e.g. updates application to reflect added item
Updates / e.g. list item to show added item I / \ \ Manipulates
View Defines display (Ul) e.g. user clicks ‘add to cart’ Sends input from user Controller Contains control logic e.g. receives update from view then notifies model to ‘add item’
Sometimes updates directly
Рис. 3. Архитектура MVC
Экземпляр класса DispatcherServlet обрабатывает запрос в соответствии с этой архитектурой, как показано на рисунке 4 [14].
Рис. 4. Обработка НТТР-запроса экземпляром класса
Обработка запроса происходит следующим образом:
1. Экземпляр класса DispatcherServlet принимает НТТР-запрос.
2. На основе объекта типа интерфейса HandlerMapping определяется контроллер, которому будет передана обработка запроса.
3. Контроллер обрабатывает запрос.
4. В результате обработки запроса контроллером экземпляр DispatcherServlet получает модель и логическое имя представления.
5. Объект типа интерфейса ViewResolver выбирает представление по его имени.
6. Представление, данные которого основаны на модели, формирует HTTP-ответ.
7. Пользователю отправляется HTTP-ответ.
Представление может быть создано при помощи таких
средств, как генератор веб-страниц Thymeleaf или технология JSP (Java (или Jakarta) Server Pages) [14].
Контроллер представляет собой Java-класс, помеченный аннотацией @Controller. Он объявляет методы, к которым применяется аннотация @RequestMapping (или одна из аннотаций, которая помечена данной аннотацией, например, @GetMapping или @PostMapping). На основе значений членов данной аннотации объект типа HandlerMapping сможет сопоставить HTTP-запрос соответствующему методу контроллера [15].
Примером контроллера в демонстрационном приложении является класс TeacherController. Этот класс объявлен как Spring bean-компонент, что позволяет внедрить в объект этого класса экземпляры других классов для выполнения различных функций. При этом в классе объявлены такие методы, как getTeacherProfile, deleteConsultation и т. д., к которым применяются аннотации @GetMapping или @PostMapping. Данные методы обрабатывают запрос, используя объект типа интерфейса Model, если необходимо передать пользователю данные.
Концепция Spring AOP
Для того чтобы неявным образом вызвать функцию после, перед или вместо выполнения определенного метода, Spring Framework использует аспекты и средства Spring AOP (Aspect Oriented Programming).
Внутренний фреймворк Spring AOP основан на AspectJ и использует идею прокси (объекта-посредника). Прокси подменяет собой изначальный объект и при вызове метода сначала выполняет свою логику, а затем делегирует полномочия изначальному методу. Принцип его работы приведен на рисунке 5 [16].
fоо() on the proxy
then foo<> on the object
Рис. 5. Принцип работы прокси-объекта
Для того чтобы объявить класс в качестве аспекта, необходимо применить к нему аннотацию @Aspect. Для того чтобы метод аспекта был выполнен при вызове метода другого объекта, необходимо применить к нему одну из следующих аннотаций: @Before (перед), @AfterReturning (после при успешном завершении), @AfterThrowing (после при завершении в результате возникновения исключительной ситуации), @After (после) или @Around (перед и после). Метод или
методы, при вызове которых должны отработать аспекты, определяются на основе значения члена одной из перечисленных аннотаций.
Такие методы в качестве аргумента могут принимать объект типа интерфейса JoinPoint, который содержит различную информацию об аспекте и методе, к которому применяется метод аспекта (например, аргументы метода). Если к методу аспекта применяется аннотация @Around, то он должен принимать в качестве аргумента объект типа интерфейса ProceedingJoinPoint, который содержит метод proceed для вызова оригинального метода [17].
Примером использования аспекта в демонстрационном приложении является уже упоминавшийся класс Notifica-tionAspect, в котором объявлен метод noti-fyStudentsAboutDeletion. Метод помечен аннотацией @After, а в качестве значения члена аннотации устанавливается название метода удаления консультации. Таким образом, данный метод будет вызван после удаления консультации независимо от места вызова метода удаления.
Другие фреймворки семейства Spring Projects
Описание средств, которыми располагают фреймворки Spring Boot, Spring Data и Spring Security, сопровождается отсылками к примерам их использования В. В. Саковичем при разработке демонстрационного приложения.
Фреймворк Spring Boot предоставляет возможность запуска веб-приложения при помощи вызова метода run класса SpringApplication из метода main. Класс, содержащий метод main, должен быть помечен аннотацией @SpringBootApplicationю.
При вызове метода run Spring Boot автоматически настроит множество параметров, а для веб-приложения дополнительно автоматически создаст сервер, используя встроенный контейнер сервлетов (по умолчанию — Tomcat).
Другой важной возможностью, поддерживаемой Spring Boot, являются профили. При разработке приложения может потребоваться использование разных Spring bean для одной и той же задачи. Например, в демонстрационном приложении имеется имитационный сервис оповещения по электронной почте, который оставляет сообщения в системе, но не отправляет сами письма. Однако на этапе эксплуатации должен использоваться настоящий сервис оповещений.
Реализовать такую возможность позволяет аннотация @Profile, которая принимает в качестве значения члена аннотации профиль или логически объединенное (операторами И, ИЛИ, НЕ) множество профилей. Аннотация применяется при настройке Spring bean (либо к классу, помеченному аннотацией @Component, либо к методу, помеченному аннотацией @Bean) [3]. Таким образом, имитационный сервис включается только при активном профиле dev, а настоящий сервис — при активном профиле prod.
Spring Boot позволяет настраивать приложение посредством конфигурационных файлов (расширения properties илиyml). Отметим некоторые параметры, предоставляемые Spring Boot [18]:
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
• server.port — адрес порта, с которого сервер принимает запросы (по умолчанию — 8080);
• spring.proffles.active — активные профили приложения;
• spring.security.user.password — пароль пользователя, создаваемый по умолчанию;
• server.servlet.session.timeout — время действия сессии;
• spring.mail.host — хост SMTP-сервера.
Используя разделитель «—», можно настроить разные
значения конфигурационных параметров для разных профилей. Для этого необходимо добавить конфигурационный параметр spring.config.activate.on-profile [3].
Фреймворк Spring Data содержит средства для работы с базами данных. Фреймворк предоставляет приложению интерфейс Repository, который является интерфейсом-маркером, с помощью которого выявляются потомки этого интерфейса. Наследующие интерфейсу Repository интерфейсы CrudRepository и ListCrudRepository объявляют базовые методы по работе с базой данных (CRUD — Create, Read, Update, Delete).
Для практического применения средств для работы с базами данных при разработке приложения необходимо создать интерфейс, наследующий Repository. Объявить метод интерфейса-репозитория можно двумя способами: указанием имени метода в соответствии с соглашением об именах или при помощи аннотации @Query, указав в качестве значения члена аннотации запрос к базе данных.
При первом подходе Spring Data предлагает множество вариантов создания комплексного запроса. Среди них поиск по какому-либо полю, поиск с условием, логические объединения (И, ИЛИ), сортировка значений, разбиение запроса на страницы и т. д. При этом Spring Data позволяет такому методу возвращать как единственный объект типа, соответствующего хранимым в репозитории данным, так и коллекцию таких объектов.
При запуске приложения Spring Data проанализирует всех потомков интерфейса Repository и, если у какого-либо интерфейса не будет реализации (и он не помечен аннотацией @NoRepositoryBean), обеспечит реализацию интерфейса с помощью механизма рефлексии в соответствии с соглашением об именах методов или на основе значения члена аннотации @Query. Однако, при необходимости, разработчик может создать реализацию интерфейса самостоятельно (в виде компонента Spring bean) [19].
В качестве примера автоматической реализации интерфейса в демонстрационном приложении можно привести интерфейс TeacherRepository, для которого на этапе выполнения программы создается прокси-объект типа jdk.proxy4.$Proxy139.
Интерфейс TeacherRepository объявляет метод для поиска консультации, который помечен аннотацией @Query. На этапе выполнения прокси на основе значения члена аннотации @Query реализует метод, выполняющий поиск консультации в базе данных. Помимо этого, прокси реализует метод findByEmail суперинтерфейса PersonRepository на основе имени метода.
Средства обеспечения безопасности и авторизации пользователей предоставляются фреймворком Spring Security и основаны на фильтре сервлетов, который делегирует
полномочия по настройке безопасности набору фильтров SecurityFilterChain, как показано на рисунке 6 [20].
Набор фильтров безопасности может быть создан методом, помеченным аннотацией @Bean в классе, помеченным аннотацией @Configuration. Такой метод должен принимать экземпляр класса HttpSecurity в качестве аргумента [3].
Рис. 6. Принцип работы средств безопасности Spring Security
Отметим некоторые методы класса HttpSecurity [21]:
• securityMatcher — устанавливает типы URL-адресов, при которых будет применятся набор фильтров;
• authenticationProvider — устанавливает источник аутентификации;
• authorizeHttpRequests — настраивает правила доступа пользователей к веб-страницам;
• formLogin — настраивает страницу входа в аккаунт;
• logout — настраивает страницу выхода из аккаунта.
В качестве примера настройки авторизации в демонстрационном приложении, структура и функциональность которого представлены в следующем разделе статьи, можно рассматривать класс TeacherSecurityConfig, который содержит три метода, помеченных аннотацией @Bean:
• teacherDetailService возвращает объект типа интерфейса UserDetailsService, который находит объект типа интерфейса UserDetails, предоставляющий следующую информацию (для поиска используются средства для работы с базой данных) [21]: имя пользователя; пароль; права доступа; различная информация о состоянии аккаунта.
• teacherAuthenticationProvider возвращает объект типа интерфейса AuthenticationProvider, который аутенти-фицирует пользователя. Для поиска пользователя используется объект типа интерфейса UserDetailsService.
• teacherFilterChain настраивает фильтры безопасности, в качестве источника аутентификации используя объект, возвращаемый предыдущим методом. Метод возвращает объект типа интерфейса SecurityFilterChain.
Веб-приложение для записи студентов
на консультации и управления консультациями
Источником примеров использования средств фрейм-ворков семейства Spring Projects, описываемых в предыдущих разделах, является демонстрационное приложение, позволяющее преподавателю организовать запись студентов
на свои консультации через Интернет. Преподаватели могут вносить сведения о предстоящих консультациях (в том числе — запланировать на будущее повторяющиеся, например еженедельные, консультации) и отменять их, просматривать списки студентов, записавшихся на консультации, а студенты — просматривать расписание консультаций, записываться на них и отменять свою запись. В необходимых случаях приложение оповещает об изменениях как преподавателей, так и студентов по электронной почте.
Структура приложения соответствует общей структуре веб-приложений, представленной на рисунке 1.
Клиентская часть приложения представлена html-стра-ницами, доступными для просмотра в веб-браузере.
Серверная часть реализована на платформе Java с использованием описанных ранее возможностей фреймвор-ков семейства Spring Projects. Серверная часть приложения реализует следующие функции:
• Авторизация. Функции приложения недоступны для неавторизированных пользователей, в процессе авторизации определяется две роли пользователей — студенты и преподаватели, которым доступны разные функции приложения.
• Взаимодействие с базой данных. Информация о студентах, преподавателях, консультациях и записях о них хранится в реляционной БД (используется СУБД H2, предоставляемая Spring по умолчанию). Реализованы средства для создания, чтения, обновления и удаления данных.
• Запись студентов на консультации позволяет авторизованному студенту записаться на консультацию или отменить свою запись.
• Управление консультаций преподавателями позволяет преподавателям создавать, просматривать и удалять консультации или планы консультаций.
• Оповещение по электронной почте. При записи студента на консультацию оповещается преподаватель, при удалении преподавателем консультации оповещаются все записанные на нее студенты.
На рисунках 7 и 8 представлены диаграммы прецедентов для разрабатываемого веб-приложения, полученные на этапе его логического проектирования при анализе постановки задачи.
Рис. 5. Диаграмма прецедентов студента
Рис. 6. Диаграмма прецедентов преподавателя
Исходя из выявленных прецедентов, для клиентской части разработано одиннадцать веб-страниц приложения, реализующих варианты взаимодействия с пользователями типа «студент» и «преподаватель». В качестве средства для реализации клиентской части выбран инструмент генерации веб-страниц на основании шаблона Thymeleaf.
На рисунке 9 представлена диаграмма компонентов разработанного веб-приложения.
Приложение включает в себя такие компоненты, как:
• общая клиентская часть, предназначенная для всех пользователей;
• интерфейс студента, предназначенный для работы студентов с веб-приложением;
• интерфейс преподавателя, предназначенный для работы преподавателей с веб-приложением.
• средства по взаимодействию с базой данных, предназначенные для манипуляции данными в БД;
• средства авторизации, предназначенные для авторизации пользователя и определения его типа;
• компонент записи на консультации, с помощью которого студенты могут пользоваться функциями, обеспечивающими запись на консультации;
• компонент управления консультациями, с помощью которого преподаватели могут пользоваться функциями, связанными с созданием, планированием и отменой консультаций;
• компонент оповещения по электронной почте студентов и преподавателей об изменениях в графике проведения консультаций.
В настоящее время семейство фреймворков Spring Projects активно применяется для разработки корпоративных систем и веб-сервисов на платформе Java.
В статье обсуждаются особенности разработки веб-приложений с использованием средств фреймворков Spring Framework, Spring Boot, Spring Data и Spring Security. Кратко описывается инструмент Spring Initializr, применяемый для создания проектов приложений. Рассматриваются основные концепции Spring Framework: IoC-контейнер, Spring
Рис. 7. Диаграмма компонентов веб-приложения
Scopes, Spring MVC и Spring AOP. Освещаются возможности, предоставляемые Spring Boot: запуск приложения, профили, конфигурационные файлы. Уделяется внимание организации взаимодействия с базами данных с помощью Spring Data и использованию средств авторизации, предоставляемых Spring Security.
Описание возможностей фреймворков семейства Spring Projects сопровождается отсылками к примерам их использования при разработке демонстрационного приложения веб-приложения, функциональность которого ориентирована на решение практически значимой в вузовской среде задачи записи студентов на консультации и управления консультациями. Приложение разработано и отлажено при подготовке выпускной квалификационной бакалаврской работы В. В. Саковича и может рассматриваться как действующий прототип реальной системы.
По мнению авторов, преимущества использования Spring Projects заключаются в следующем.
Во-первых, обилие специализированных фреймворков, входящих в семейство, позволяет упростить решение задач, с которыми сталкиваются разработчики при разработке сложных систем. Так, IoC-контейнер позволяет сосредоточиться на разработке классов, отвечающих за функциональность приложения, а их взаимодействие в ходе выполнения обеспечивает Spring Framework. Во-вторых, использование Spring Boot позволяет упростить запуск приложения путем автоматизации его настройки. Кроме того, фреймворки Spring Projects позволяют разработчику интегрировать приложение с разнообразным набором сервисов, включая базы данных и контейнеры сервлетов.
Таким образом, Spring Projects хорошо подходит для разработки сложных и многофункциональных систем, в том числе в области транспорта, например для решения задач комплексного управления логистикой и предоставления услуг клиентам такими компаниями в области транспорта, как ОАО «РЖД».
Использованные в статье материалы прошли апробацию на LXXXIII Всероссийской научно-технической конференции студентов, аспирантов и молодых ученых
«Транспорт: проблемы, идеи, перспективы», состоявшейся в ПГУПС в рамках фестиваля «Неделя науки — 2023». Материалы доклада В. В. Саковича, подготовленного под руководством его соавторов, рекомендованы к публикации кафедрой «Информационные и вычислительные системы».
1. Хомоненко, А. Д. Разработка Web-приложений для работы с базами данных: Учебное пособие / А. Д. Хомоненко, В. В. Рогальчук, А. В. Тырва; под ред. А. Д. Хомоненко. — Санкт-Петербург: ПГУПС, 2012. — 87 с.
2. Web Application Architecture: The Latest Guide 2022. — 2022. — 10 March // ClicklT. DevOps & Software Development URL: http://www.clickittech.com/devops/web-applica-tion-architecture (дата обращения 18.06.2023).
3. Уоллс, К. Spring в действии. Шестое издание = Spring in Action. Sixth Edition / пер. с англ. А. Н. Киселева. — Москва: ДМК Пресс, 2022. — 544 c.
4. Vermeer B. Spring Dominates the Java Ecosystem with 60% Using It for Their Main Applications — 2020. — 5 February // Snyk. Developer Security Platform. URL: http://snyk.io/blog/ spring-dominates-the-java-ecosystem-with-60-using-it-for-their-main-applications (дата обращения 18.06.2023).
5. Why Spring? // Spring. URL: http://spring.io/why-spring (дата обращения 18.06.2023).
6. Projects // Spring. URL: http://spring.io/projects (дата обращения 18.06.2023).
7. Understanding Spring Framework and Spring Ecosystem // Pranay Bathini’s Blog. — 2021. — 02 July.
URL: http://www.pranaybathini.com/2021/07/understanding-spring-framework-and-ecosystem.html (дата обращения 18.06.2023).
8. Spring Initializr. URL: http://start.spring.io (дата обращения 18.06.2023).
9. Шилдт, Г. Java 8. Полное руководство. Девятое издание = Java: The Complete Reference. Ninth Edition / пер. с англ. и редакция И. В. Берштейна. — Москва: Издательский дом «Вильямс», 2015. — 1376 с.
10. Spring Framework. Core Technologies // Spring. URL: http://docs.spring.io/spring-framework/reference/core.html (дата обращения 18.06.2023).
11. Spring Framework. Bean Scopes // Spring.
URL: http://docs.spring.io/spring-framework/reference/core/ beans/factory-scopes.html (дата обращения 18.06.2023).
12. MVC — MDN Web Docs Glossary: Definitions of Web-related terms // MDN Web Docs.
URL: http://developer.mozilla.org/en-US/docs/Glossary/MVC (дата обращения 18.06.2023).
13. Späth, P. Beginning Java MVC 1.0: Model View Controller Development to Build Web, Cloud, and Microservices Applications. — New York: Apress, 2020. — 460 p.
14. Walls, C. Spring in Action. Fourth Edition. — New York: Manning, 2014. — 624 c.
15. Spring Framework. Spring Web MVC // Spring. URL: http://docs.spring.io/spring-framework/reference/web/ webmvc.html (дата обращения 18.06.2023).
16. Spring Framework. Proxying Mechanisms // Spring. URL: http://docs.spring.io/spring-framework/reference/core/aop/ proxying.html (дата обращения 18.06.2023).
17. Spring Framework. Aspect Oriented Programming with Spring // Spring. URL: http://docs.spring.io/spring-framework/ reference/core/aop.html (дата обращения 18.06.2023).
18. Common Application Properties // Spring.
URL: http://docs.spring.io/spring-boot/docs/cunient/reference/html/ application-properties.html (дата обращения 18.06.2023).
19. Spring Data Commons — Reference Documentation. Version 3.1.1 / O. Gierke, T. Darimont, C. Strobl, [et al.] // Spring. — Обновлено 16.06.2023.
URL: http://docs.spring.io/spring-data/commons/docs/current/ reference/html (дата обращения 18.06.2023).
20. Spring Security. Architecture // Spring.
URL: http://docs.spring.io/spring-security/reference/servlet/ architecture.html (дата обращения 18.06.2023).
21. Spring Security Docs 6.1.0 API // Spring.
URL: http://docs.spring.io/spring-security/site/docs/current/api/ index.html (дата обращения 18.06.2023).
Using Spring Projects Family Frameworks for Developing Web Applications on Java Platform
V. V. Sakovich, PhD G. I. Kozhomberdieva Emperor Alexander I St. Petersburg State Transport University Saint Petersburg, Russia lampirg1@gmail.com, kgi-liizht@yandex.ru
Abstract. The article discusses the features of developing web applications on the Java platform using frameworks from the Spring Projects family. The basic concepts of the Spring Framework are considered: IoC container, Spring Scopes, Spring MVC, and Spring AOP. The possibilities provided by the Spring Boot are covered: application launch, profiles, and configuration files. In addition, attention is paid to the organization of interaction with databases using the Spring Data as well as using of authorization tools provided by the Spring Security. As a demo of a web application developed using the Spring features, the article provides a client server application for signing up students for a consultation and consultation management.
Keywords: web application, Java platform, Java annotation, framework, Spring Projects, Spring Framework, MVC architecture.
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
1. Khomonenko A. D., Rogalchuk V. V., Tyrva A. V. Development of Web Applications for Working with Databases: Study guide [Razrabotka Web-prilozheniy dlya raboty s bazami dan-nykh: Uchebnoe posobie]. Saint Petersburg, PSTU, 2012, 87 p.
2. Web Application Architecture: The Latest Guide 2022, ClickIT. DevOps & Software Development. Published online at March 10, 2022. Available at: http://www.clickittech.com/ devops/web-application-architecture (accessed 18 Jun 2023).
3. Walls C. Spring in Action. Sixth Edition [Spring v deystvii. Shestoe izdanie]. Moscow, DMK Press Publishing House, 2022, 544 p.
4. Vermeer B. Spring Dominates the Java Ecosystem with 60% Using It for Their Main Applications, Snyk. Developer Security Platform. Published online at February 05, 2020. Available at: http://snyk.io/blog/spring-dominates-the-java-ecosys-tem-with-60-using-it-for-their-main-applications (accessed 18 Jun 2023).
5. Why Spring, Spring. Available at: http://spring.io/why-spring (accessed 18 Jun 2023).
6. Projects, Spring. Available at: http://spring.io/projects (accessed 18 Jun 2023).
7. Understanding Spring Framework and Spring Ecosystem, Pranay Bathini’s Blog. Published online at July 02, 2021. Available at: http://www.pranaybathini.com/2021/07/under-standing-spring-framework-and-ecosystem.html (accessed 18 Jun 2023).
8. Spring Initializr. Available at: http://start.spring.io/ (accessed 18 Jun 2023).
PhD D. P. Burakov independent researcher Saint Petersburg, Russia burakovdmitry8@gmail.com
9. Schildt H. Java: The Complete Reference. Ninth Edition [Java 8. Polnoe rukovodstvo. Devyatoe izdanie]. Moscow, Williams Publishing House, 2015, 1376 c.
10. Spring Framework. Core Technologies, Spring. Available at: http://docs.spring.io/spring-framework/reference/ core.html (accessed 18 Jun 2023).
11. Spring Framework. Bean Scopes, Spring.
Available at: http://docs.spring.io/spring-framework/reference/ core/beans/factory-scopes.html (accessed 18 Jun 2023).
12. MVC — MDN Web Docs Glossary: Definitions of Web-related terms, MDN Web Docs. Available at: http://devel-oper.mozilla.org/en-US/docs/Glossary/MVC (accessed 18 Jun 2023).
13. Späth P. Beginning Java MVC 1.0: Model View Controller Development to Build Web, Cloud, and Microservices Applications. New York, Apress, 2020, 460 p.
14. Walls C. Spring in Action. Fourth Edition. New York, Manning, 2014, 624 p.
15. Spring Framework. Spring Web MVC, Spring. Available at: http://docs.spring.io/spring-framework/reference/web/ webmvc.html (accessed 18 Jun 2023).
16. Spring Framework. Proxying Mechanisms, Spring. Available at: http://docs.spring.io/spring-framework/reference/ core/aop/proxying.html (accessed 18 Jun 2023).
17. Spring Framework. Aspect Oriented Programming with Spring, Spring. Available at: http://docs.spring.io/spring-framework/reference/core/aop.html (accessed 18 Jun 2023).
18. Common Application Properties, Spring. Available at: http://docs.spring.io/spring-boot/docs/current/reference/html/ application-properties.html (accessed 18 Jun 2023).
19. Gierke O., Darimont T., Strobl C., et al. Spring Data Commons — Reference Documentation. Version 3.1.1, Spring. Last updated at June 16, 2023.
Available at: http://docs.spring.io/spring-data/commons/docs/ current/reference/html (accessed 18 Jun 2023).
20. Spring Security. Architecture, Spring.
Available at: http://docs.spring.io/spring-security/reference/ servlet/architecture.html (accessed 18 Jun 2023).
21. Spring Security Docs 6.1.0 API, Spring.
Spring
Spring — это фреймворк с открытым исходным кодом для языка программирования Java. Он был создан для упрощения разработки и поддержки масштабируемых, слабосвязанных и повторно используемых приложений. Фреймворк нужен, чтобы разработчикам было легче проектировать и создавать приложения. Spring не связан с конкретной парадигмой или моделью программирования, поэтому его могут использовать как каркас для разных видов приложений.

Освойте профессию «Java-разработчик»
Чаще всего Spring используется в крупных корпоративных проектах: это характерно для Java и связанных с ним инструментов. Но благодаря универсальности применять Spring можно и в других случаях. Его задача — дать разработчикам больше свободы в проектировании и реализации.
Spring — открытый бесплатный проект, просмотреть его исходный код может любой желающий. Он написан на Java, Kotlin и Groovy, поэтому в теории может использоваться с любым из этих языков. На практике Spring чаще всего применяют с Java. Название читается как «Спринг».
Профессия / 14 месяцев
Java-разработчик
Освойте востребованный язык

История создания Spring Framework
Spring был разработан компанией Pivotal Software и впервые выпущен в 2002 году.
История создания Spring началась в 2001 году, когда Pivotal стала работать над проектом под названием Sprinkler — это была система управления контентом для веб-сайтов. В то время команда разработчиков состояла из четырех человек: Роя Филдинга, Марка Стеббинса, Дейва Буша и Саймона Кокса.
В процессе работы над проектом команда столкнулась с рядом проблем, связанных с необходимостью написания большого количества кода для реализации базовых функций, таких как управление транзакциями, обработка исключений, внедрение зависимостей и т.д. Это привело к тому, что команда приняла решение создать фреймворк для упрощения и стандартизации разработки веб-приложений.
Так и началась разработка Spring. Название Spring было выбрано из-за его простоты и ассоциации с весной — временем обновления и роста.
Первый релиз Spring был выпущен в апреле 2002 года. Он содержал в себе несколько основных компонентов, включая механизм внедрения зависимостей, поддержку аспектов AOP и интеграцию с Hibernate ORM.
Кто пользуется Spring
- Java-разработчики, которые занимаются созданием десктопных, мобильных или веб-приложений, — Spring можно использовать в любом из направлений. Чаще всего речь идет о проектах enterprise-масштаба.
- Kotlin-разработчики, так как этот язык написан на основе Java и использовался для создания Spring.
- Системные архитекторы и инженеры, основная задача которых — проектировать будущие проекты. Spring можно использовать как каркас, шаблон для приложения, поэтому он важен в проектировании и анализе.
- Иногда — бэкенд-разработчики, так как в некоторых случаях серверная часть сайта может быть написана на Java.
Для чего нужен Spring
- Для более быстрого и легкого создания приложений — набор инструментов фреймворка позволяет выполнять те же задачи с меньшим количеством затрат, чем при написании с нуля.
- Для архитектурной «гибкости»: Spring универсален, поэтому позволяет реализовать нестандартные решения.
- Для гибкого использования возможностей — к проекту можно подключать разнообразные модули и тем самым настраивать инструментарий под свои нужды.
- Для удобного построения зависимостей, благодаря которому разработчики могут сконцентрироваться на логике приложения, а не на том, как подключить одно к другому.
- Для реализации парадигмы аспектно-ориентированного программирования, о котором мы подробнее расскажем ниже.
- Для решения задач, связанных со связями между компонентами или разными приложениями, для доступа различных частей системы друг к другу и многого другого.
Принципы Spring
Универсальность. Spring иногда называют платформой: он действительно предлагает разработчикам как бы фундамент, на основе которого можно реализовать приложение. Основная философия — универсальность. Это отличает Spring от других похожих фреймворков.
Облегченность. Второй важный принцип — минимальное воздействие, благодаря которому Spring называют облегченным. Это относится не к размеру фреймворка, а к концепции использования. Благодаря подходу задачи можно реализовать с меньшим количеством кода и минимальной зависимостью от фреймворка.
Поддержка инфраструктуры. На русскоязычном сайте Spring фреймворк сравнивают с водопроводом: основное внимание в нем уделено настройке зависимостей и связей между технологиями. В фреймворке реализован подход IoC, Inversion of Control — инверсия контроля, принцип, который облегчает зависимости между компонентами. Функциональность помогает поддерживать инфраструктуру внутри проекта.
Перед началом работы проект нужно сконфигурировать — указать, какие модули фреймворка к нему подключить и какие технологии использовать . В зависимости от конфигурации разработчику доступны те или иные инструменты.
Как устроен фреймворк
Spring — модульный, то есть состоит из множества компонентов, мини-фреймворков. Компоненты (модули) иногда называют фреймворками во фреймворке. Опишем основные — те, которые обеспечивают фреймворку функциональность.
IoC. Выше мы говорили про зависимости и инверсию контроля. Модуль, который управляет ей, считается основным в фреймворке. Это контейнер, которому делегировано управление зависимостями и конфигурирование разных компонентов. Он пользуется технологией, которая называется Dependency lnjection — инъекция зависимостей. При инверсии контроля создание зависимостей выносится за пределы создания самого объекта — вместо этого они создаются в специальном методе или конструкторе в зависимости от выбранного подхода.
Модуль АОП. АОП — аббревиатура аспектно-ориентированного программирования, парадигмы, для которой и нужен модуль. Чаще всего ее используют в Java и похожих языках.

Станьте Java-разработчиком
и создавайте сложные сервисы
на востребованном языке
Java — язык с сильным упором на объектно-ориентированное программирование. Но возможностей ООП не всегда достаточно — существуют задачи, для которых подход не оптимален. Это сквозная функциональность — функциональность, которую невозможно выделить в отдельные сущности с помощью ООП. В итоге ее реализация разбрасывается по разным объектно-ориентированным сущностям, код становится сложнее и запутаннее.
АОП нужно, чтобы облегчить поддержку сквозной функциональности. Эта парадигма позволяет описать ее отдельно и выделить в самостоятельную сущность. Но методы, которые при этом используются, лежат за пределами ООП и потому требуют отдельной реализации. В Spring за эту реализацию отвечает соответствующий модуль.
Модуль доступа к данным. Эта часть фреймворка отвечает за взаимодействие с СУБД — системами управления базами данных. С помощью модуля Spring можно «связать» логику на Java с управлением базой, настроить доступ к ней разных частей кода. Например, если в приложении выполнится скрипт, которому потребуется информация из базы данных, он сможет к ней обратиться. Задача Spring — в организации грамотного и безопасного доступа.
Для доступа к данным в Spring используется стандарт JDBC, или Java DataBase Connectivity — соединение с базой данных на Java. База соединяется с приложением по уникальному URL с помощью особых сущностей — драйверов.
Кроме этого стандарта, Spring поддерживает ORM — Object-Relational Mapping, или объектно-реляционное отображение. Так называется технология, которая «связывает» реляционные базы данных с сущностями ООП. Spring может работать со всеми основными реализациями ORM.
Модуль транзакций. Транзакция — это последовательность запросов к базе данных, собранная в единый блок. Spring позволяет управлять транзакциями и координировать их, чтобы работа была прозрачной и безопасной. Функциональность фреймворка включает в себя возможность работать с локальными, глобальными и вложенными транзакциями, использовать для них точки сохранения и многое другое. Он поддерживает и абстракции — они нужны для некоторых форматов данных в базе.
Модуль MVC. MVC — это популярная схема приложения, при которой оно как бы разделяется на три основных части: модель данных, отображение и контроллер. Модель представляет собой данные, с которыми работает приложение, отображение отвечает за интерфейс и общение с пользователем, а контроллер — это логика изменения модели в ответ на действия пользователя. Чаще всего схему используют для веб-приложений.
В Spring есть собственная функциональность для реализации MVC. Изначально разработчики ее не планировали, но добавили, когда оказалось, что альтернативные реализации не очень хорошо решают поставленные задачи. Особенности модуля MVC для Spring — прозрачное и четкое разделение между слоями, возможность быстро заменить один интерфейс на другой, привязка функциональности к конкретному интерфейсу. При создании приложений по схеме MVC можно пользоваться не только одноименным модулем, но и другими инструментами Spring.
Модуль авторизации и аутентификации. В нем собраны инструменты, отвечающие за авторизацию и аутентификацию пользователя в системе. В коммерческой разработке в этой области сейчас огромное количество возможных решений, и Spring позволяет работать с большинством современных протоколов и процессов. Этот модуль тесно связан с другой разработкой — Spring Security, отдельным фреймворком на базе Spring. Он позволяет создавать сложные механизмы аутентификации и авторизации, рассчитанные в том числе на масштабные корпоративные Spring-проекты. Spring Security официально включен в Spring как дочерняя разработка.
Другие модули и возможности. Как уже говорилось, модулей в Spring несколько десятков. Кроме описанных выше, стоит упомянуть еще несколько:
- организация удаленного доступа, при котором сущности языка Java передаются через сеть по специальным протоколам и технологиям. Благодаря возможности приложение может вызвать функцию или сервис, которые хранятся на другом сервере, — это важно для больших проектов;
- модуль удаленного управления — это не то же самое, что удаленный доступ. Удаленное управление помогает настраивать и конфигурировать Java-объекты, даже находящиеся на других серверах;
- модуль работы с сообщениями помогает организовать отправку, получение и чтение системных сообщений. Сообщения — способ разных Java-приложений «общаться» друг с другом;
- модуль для тестирования содержит классы и методы для автоматизированного тестирования кода.
Дочерние фреймворки. Мы намеренно отделили их от модулей: хотя дочерние проекты могут быть компонентами Spring, их можно применять с другими разработками. Один из фреймворков, Spring Security, мы упомянули выше. Это отдельный инструментарий. И он не единственный:
- Spring Roo — фреймворк для быстрого создания бизнес-приложений. Он связан со Spring и частично пользуется его возможностями, но задача у него другая, более специфическая. Он реализует подход «соглашение прежде конфигурации», или CoC (Convention over Configuration). Это означает, что фреймворк включает ряд соглашений по структуре проекта, и они превыше конкретных конфигурационных решений. Подход нужен, чтобы быстро создавать типовые приложения и не заботиться о разработке уникальных соглашений;
- Spring Integration — фреймворк для интеграции разных корпоративных приложений в единую сеть. Он позволяет обмениваться сообщениями, маршрутизировать потоки данных, активировать сервисы, интегрироваться с различными технологиями и строить архитектуру сети. Это бывает нужно, например, на больших предприятиях.

Станьте Java-разработчиком
и создавайте сложные сервисы
на востребованном языке
В чем разница между Spring и Spring Boot
В начале работы с фреймворком можно перепутать Spring и Spring Boot. Это не отдельный фреймворк, а дополнение к Spring, которое облегчает работу с ним. Spring нужно конфигурировать для каждого нового проекта. Конфигурация может занять много времени и не дать ощутимые преимущества в дальнейшей работе. Чтобы исправить проблему, был создан Spring Boot. Он включает комплекс утилит для автоматизации настройки.
- автоматически конфигурирует проекты на основе одного из стартовых пакетов для них;
- облегчает создание и развертывание приложений на Spring;
- быстро и легко управляет зависимостями и подгружает необходимые модули;
- поддерживает встроенный сервер для запуска приложений;
- может автоматически создать и настроить базу данных для приложения.
При необходимости настройки Spring Boot можно изменить, чтобы он конфигурировал и настраивал компоненты иначе. Набор утилит облегчает работу со Spring, поэтому некоторые туториалы по умолчанию написаны с учетом использования Spring Boot.
Преимущества Spring
Возможность комплексного использования. Благодаря огромному количеству компонентов и технологий, которые поддерживает Spring, он универсален. Его можно использовать комплексно, например для разных частей архитектуры MVC или решения других сложных задач. Не нужно собирать большой стек технологий. Если чего-то окажется недостаточно, помогут дополнительные инструменты и другое ПО экосистемы Spring.
Облегчение и ускорение работы. Цель любого фреймворка — делать работу эффективнее и быстрее. То, на что ушло бы несколько месяцев на «чистом» языке, с фреймворком делается за считанные дни, а в коммерческой разработке время имеет ключевое значение. Фреймворк — как каркас, вокруг которого пишется остальной код программы. Некоторые компоненты и логика уже реализованы, и задача программиста — в том, чтобы грамотно ими воспользоваться.
Масштабность. Благодаря огромной экосистеме можно подобрать решение для любой задачи. Дополнительные модули, технологии и программное обеспечение от разработчиков существуют для большинства актуальных направлений: веб-разработки, создания микросервисов, реализации той или иной программной модели. Все дополнительные технологии описаны на официальном сайте, там же есть примеры их использования для решения разных задач.
Большое сообщество. Spring востребован и нужен на рынке труда. С ним работают много энтузиастов, поэтому вы, скорее всего, сможете найти ответ на свой вопрос на тематических порталах. У него обширная документация, часть которой переведена на русский язык. Энтузиасты постоянно улучшают фреймворк или дополняют его новыми технологиями — в долговременной перспективе это облегчает программирование.
Открытый исходный код. Spring бесплатный, а его код открыт всем желающим. Технологии, связанные с Java, чаще других бывают проприетарными и закрытыми, поэтому открытость Spring особенно важна — она снижает порог входа и облегчает изучение фреймворка.
Недостатки Spring
Долгая настройка. «Чистый» Spring требует длительной конфигурации с нуля для каждого проекта. Это отнимает время и силы. Для решения проблемы существует Spring Boot. Он упрощает работу с фреймворком, но может стать причиной путаницы из-за схожести названий.
Сложный старт. Java и связанные с ней технологии — не самые простые для старта. Поэтому новичкам может быть сложно начать изучение программирования именно со Spring и дочерних инструментов.
Как начать пользоваться Spring Framework
Начинать работу с Spring и осваивать фреймворк лучше после того, как вы познакомились с базой программирования на «чистом» Java. На официальном сайте есть инструкция по подключению фреймворка: достаточно указать несколько параметров, и сайт сам сгенерирует код. Его нужно вставить в конфигурацию сборки Java — после этого фреймворком можно пользоваться в проектах. На ранних этапах изучения можно воспользоваться обучающими материалами, которые есть в открытом доступе даже на официальном сайте. Существуют русскоязычные сообщества энтузиастов, тематические сайты и порталы, где можно общаться с единомышленниками.
Java-разработчик
Java уже 20 лет в мировом топе языков программирования. На нем создают сложные финансовые сервисы, стриминги и маркетплейсы. Освойте технологии, которые нужны для backend-разработки, за 14 месяцев.

Статьи по теме:
Spring Framework. Начальный уровень
Экзамен «Spring Framework. Начальный уровень» для пользователей и системных администраторов.
- Защита приложений шаблонизаторы
- Spring mvc
- Введение в spring
- Доступ к данным
- Контекст и бины в spring
- Шаблонизаторы защита приложений
- Уровень методов
- Описание
- Подробнее о товаре
- Отзывы (0)
- Вопросы теста
- Обратная связь
Форма сдачи теста: Экстерн
Количество вопросов: 30
Время: 45 минут.
Проходной балл: 85%
Срок действия сертификата: неограничен
Сертификат появляется в Вашем профиле ресурса GeekBrains, и Вы можете его распечатать.

По наличию 12346 шт.
Внимание !
Вопросы к тесту выложены исключительно в ознакомительных целях: количество вопросов может не совпадать с действительным, актуальность не поддерживается,- за решением теста Welcome to the cashier!
Какой тип выборки подтягивает данные из связанных сущностей только при обращении в соответствующему геттеру?
DEMAND
LAZY
One-To-Many
EAGER
В каком порядке происходят указанные ниже действия при создании бина? Создание бинов через BeanFactory Настройка объектов BeanDefinition Настройка бинов Создание объектов BeanDefinition
4, 3,2,1
4,3,1,2
4,2,1,3
1,2,3,4
Альтернативой какой концепции Java является Spring Framework?
Какой метод создаёт транзакцию в EntityManager?
beginTransaction
getTransaction
begin
startTransaction
Как Spring MVC определяет, к какому методу класса-контроллера нужно обратиться при запросе от пользователя?
При помощи описанной в DispatcherServlet логики
При помощи контекста приложения
При помощи аннотации @Controller
При помощи аннотации @RequestMapping
Для каких типов связей между таблицами потребуется аннотация @JoinTable?
Один-к-одному
Многие-ко-многим
Один-ко-многим
Не один из других вариантов
Какая аннотация отвечает за внедрение объектов?
Что должны содержать все сущности Hibernate?
Setter
Метод инициализации
Getter
Конструктор по умолчанию
Какую реализацию IoC использует Spring?
Service Locator
Factory Pattern
Dependency Injection
Сontextualized Lookup
Какая аннотация задаёт правило валидации данных из полей в сущности, связанной с БД?
Что включает в себя Модель в MVC-приложении?
Сущности вызова методов сервисного уровня
Сущности инициализации приложения
Сущности доступа и манипуляции данными
Сущности вывода данных для пользователя
Какой атрибут аннотации связи (например, @OneToMany) указывает тип выборки связанных данных?
Как произвести инъекцию некоего значения property из настройки в поле Bean-а?
Как реализуется настройка приложения через JavaConfig?
Создается класс для конфигурирования
Все параметры конфигурации указываются в ключах запуска приложения
Создается класс для конфигурирования с аннотацией @Configuration
Создается класс для конфигурирования с аннотацией @Bean
Что содержат jsp-файлы?
Файл конфигурации модуля JSP
Файл с Java-кодом, отвечающий за конфигурацию сервлетов
Файл с Java-кодом, отвечающий за обработку входящих запросов
Файл с Java-кодом, на основании которого генерируется HTML-страница
Какой файл отвечает за конфигурацию DispatcherServlet при конфигурировании через XML?
Какая аннотация потребуется для получения новых объектов при каждом вызове getBean?
Singleton
Bean
Scope
Component
Какой паттерн реализуют бины в Spring при их создании без дополнительных параметров?
Какая аннотация включает защиту на уровне методов в Spring Security?
Какая запись в XML-конфигурации позволит создать bean-объект?
Какая аннотация задаёт правило валидации размеров полей в сущности, связанной с БД?
Какой модуль является основным и необходимым для всех приложений Spring?
Какой уровень защиты не предоставляет Spring Secutiry?
Уровень апплета
Уровень URL-запросов
Уровень представлений
Уровень методов
От какого класса должны наследоваться классы-репозитории при использовании Spring Data JPA?
Какая аннотация позволяет указать компилятору, что класс является сущностью в БД?
Что не входит в JPA?
Какой параметр нужно передать аннотации Scope для того, чтобы каждый раз получать новый экземпляр Bean-а?
Для какого типа полей применима аннотация @GeneratedValue?
Поля, входящие в индекс
Поля, значения которых собираются на основании данных в сущности
Поля, входящие в индекс Unique
Поля уникального идентификатора
Где инициализируется контекст приложения в MVC?
При деплое
В представлении
В модели
В контроллере
Какой сервлет в Spring MVC отвечает за адресацию запросов пользователя контроллеру?
Вам необходимо спроектировать новостную ленту, в которой будут такие сущности как статья, теги к статье, авторы статей. Сколько классов @Entity нужно будет создать с учетом того, что у одной статьи может быть много тегов, но только один автор?
За что отвечает Apache tiles?
Генерация HTML-кода из JSP
Генерацию сервлетов
Обработка URL-запросов и сопоставление им JSP-файлов
Шаблонизация JSP-страниц
Укажите корректную форму метода и аннотации для получения параметра из GET-запроса вида: /user/123, где 123 – параметр ID пользователя
@RequestMapping(value=»/user_id», method=RequestMethod.GET) public String home(Model userModel, @PathVariable(value=»user_id») Integer id) < >
@RequestMapping(value=»/», method=RequestMethod.GET) public String home(Model userModel) Integer id)< >
@RequestMapping(value=»/user/», method=RequestMethod.GET) public String home(Model userModel, @PathVariable(value=»user_id») Integer id)< >
@RequestMapping(value=»/», method=RequestMethod.GET) public String home(Model userModel, @PathVariable(value=»user_id») Integer id)
Какой аннотацией маркируется уникальный идентификатор сущности для Hibernate?
@Unique
@Index
@Id
@Identifier
Какая аннотация в JavaConfig позволяет указать пакет, содержащий контроллеры Spring MVC?
@ComponentScan
@ControllerScan
@Controller
@Import
Какую Maven зависимость необходимо добавить в проект для корректного функционирования Sping MVC?
spring-mvc
spring-webmvc
spring-web
spring-context
Какой уровень доступа к данным в приложении позволяет создавать связи между сущностями системы и их отображением в БД
Какой области видимости нет в Spring?
Singleton
globalSession
Context
Session
Какой jstl-префикс позволяет управлять уровнями доступа к элементам на JSP-странице при помощи Spring Security?
Какая аннотация позволит создать объект, сделать его бином и поместить в контекст?
Какая аннотация позволяет контролировать доступ к методу различным типам пользователей при помощи Spring Security?
@PreAuth
@Authorize
@SecureMethod
@PreAuthorize
Spring поддерживает спецификацию стандарта JSR-250. Что это означает в отношении жизненного цикла бинов?
Возможность реализовывать внедрение зависимости через @Autowired
JSR-250 неактуален для Spring
Есть возможность управлять жизненным циклом бина при помощи аннотаций @PostConstruct и @PreDestroy
Есть возможность управлять жизненным циклом бина при помощи XML-конфигурации init-method и destruct-method
Необходимо спроектировать новостную ленту, в которой будут такие сущности как: статья, теги к статье, комментарии к статье, авторы комментариев. Сколько классов @Entity нужно создать с учетом того, что у одной статьи может быть много тегов и комментариев, но у комментария есть только один автор?
В какой метод формирования запросов в JPQL нужно передавать строку в виде SQL-запроса
Какая директория используется по умолчанию для хранения jsp-файлов?
Фреймворк Hibernate предоставляет средства оболочки для доступа к данным. Какой тип оболочки предоставляется данным фреймворком?
Какого способа внедрения зависимости не существует?
Внедрение через сеттеры
Внедрение через поля
Внедрение через конструктор
Внедрение через обертку
Какие типы конфигурации поддерживает Spring?
Какой класс является базовым для создания класса настройки защиты в Spring Security?
AbstractSpringSecurityWebApplicationInitializer
AbstractSecurityWebApplicationInitializer
AbstractWebApplicationInitializer
AbstractSecurityApplicationInitializer
Какие зависимости в Maven требуются для работы EntityManager?
Hibernate
Hibernate-entitymanager
Hibernate-core и Hibernate-entitymanager
Hibernate-core
Что предоставляет EntityManager?
Фабрику для создания объектов Hibernate
Реализацию пакета CRUD-операций
Интерфейс для создания таблиц в БД
Возможность использования аннотации @Entity
Какая аннотация является аналогом XML-атрибута init-method?
PreConstruct
PostConstruct
InitMethod
PostDestroy
Какие значения может принимать атрибут strategy у аннотации @GeneratedValue?
Какой метод класса BindingResult позволяет получить результат валидации HTML-формы?
Что такое контекст в Spring?
Набор параметров, указываемых в ключах при запуске приложения
Специальный контейнер для реализации концепции инверсии управления и внедрения зависимостей, управляющий созданием, настройкой и сборкой бинов
Основной интерфейс, предоставляющий информацию о конфигурации
Один из способов конфигурирования приложения
Какой тип выборки подтягивает данные из связанных сущностей сразу при получении основной сущности?
Какой интерфейс используется для контекста приложения?
Вы можете обратится к нам напрямую, через:
По Skype: molodoyberkut
По Telegram: @MolodoyBerkut
По ICQ: 657089516
Или через форму обратной связи на нашем сайте

Получите наши последние новости и специальные предложения
