Spring. Модули.

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

Вы слышите Spring и вот вам уже кажется, что это огромный фреймворк, который очень сложно освоить. На деле все обстоит не совсем так. Да, Spring большой, но здесь есть одно но.

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

Вы начинаете учить Spring и знакомитесь с DI-контейнером. Подключаете три самых основных модуля и все. Понадобилось подключить какую-то из существующих ORM? Добавляете в зависимости всего один модуль — spring-orm. Нужно написать веб-приложение с красивым UI – добавляете spring-webmvc. Именно по такому принципу и ведется работа со Spring.

Что такое модуль?

Модуль — это обычный JAR-архив с набором Java-классов, никакой магии здесь нет.

Все модули Spring можно разбить на несколько групп, как это сделано на картинке ниже:

На рисунке выше основные модули Spring разбиты на несколько групп. Поговорим о них поподробнее.

Core Container.

Основа Springэто DI-контейнер для управления вашими зависимостями. Все, что относится к созданию и управлению зависимостей находится в модулях spring-beans и spring-core.

DI-контейнер только звучит грозно. На деле это обычная Фабрика (Factory pattern), создающая для вас объекты там, где вы скажете. А все бины хранятся в контейнере Map.

Context (spring-context) – в этом модуле лежит все, что связано с поддержкой класса ApplicationContextзагрузка ресурсов, инициализация контекста, классы, позволяющие использовать контекст Spring в Java-контейнерах вроде Tomcat/Jetty.

SpEL – (Spring Expression Language)специальный язык выражений, который дает вам возможность обращаться к вашим бинам прямо внутри XML-конфигурации Spring и настраивать их в зависимости от различных, иногда даже весьма сложных условий. Модуль, отвечающий за эту функциональность автоматически подгружает spring-core.

Data Access/Integration.

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

Проект Spring JDBC упрощает работу с написанием кода доступа к базам данных в стиле JDBC. Если вы хоть раз делали запрос к базе данных на чистом JDBC, то вы знаете, что это такое. Специальный класс, JdbcTemplate из модуля spring-jdbc облегчит вам жизнь.

Spring ORMподдержка популярных ORM решений, таких как JPA, Hibernate и iBatis.

Другой крупный проект — Spring Dataсоздает еще один слой абстракции доступа к вашим базам данных, причем не только реляционным, поддерживаются также и всевозможные NoSQL СУБД, вроде MongoDB, Cassandra и так далее.

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

Поддержка транзакционности в Spring также присутствует и работает через Spring AOP, о котором мы еще поговорим, но чуть позже. Все, что связано с работой транзакций Spring и поддержкой Java Transaction API (JTA), находится в модуле spring-tx.

Spring OXM (Object/XML Mapping)модуль для обработки XML, маршалинга и демаршалинга. Работает с самыми популярными Java-библиотеками для обработки XML вроде Castor XML и JAXB.

Spring JMSподдержка стандарта Java для построения систем обмена сообщениями для интеграции систем друг с другом. Также для целей межсистемной интеграции есть еще один подпроект Spring – Spring Integration.

Web.

Типичный Enterprise всегда был сильной стороной Java, а следовательно и таких флагманских для платформы проектов как Spring. Что же с разработкой веб-приложений, спросите вы? Но и здесь у Spring есть много интересного.

Spring MVCмодуль для создания обычных веб-приложений. Он, как следует из названия, полностью следует использованию паттерна MVC. Для реализации самого UI можно не ограничиваться одной Java и таких технологий как, например, JSF или Apache Velocity, поддержка которых присутствует в Spring. Вы вправе использовать и JavaScript с его огромным набором библиотек.

Spring Reactive Webновый модуль Spring, появившийся в последней (на момент написания статьи) версии за номером пять. Идеологическое продолжение проекта Spring Web Flux, с помощью которого вы можете максимально просто и красиво писать реактивные веб-приложения на Java.

AOP/Aspects.

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

И это не все! На самом деле Spring содержит в себе еще большое число различных модулей, среди которых Spring Messaging, Spring WS, Spring Batch, Spring Cloud и так далее.

Ну и напоследок, конечно Spring Boot, без которого уже кажется странным использование Spring в принципе. Данный модуль помогает программисту максимально быстро запустить его проект, абстрагируясь от огромного количества деталей конфигурации в XML и настроек среды развертывания в виде контейнера. Spring Boot для этих целей предоставляет встроенный контейнер, который просто работает. И это прекрасно.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *