Руководство по Spring. Введение.

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

spring-by-pivotal

Начать я решил с технологии Spring Framework.

Итак, приступим.

Для кого

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

Необходимые знания

Для того чтобы Вы могли понимать вещи, которые описаны в этом руководстве, Вам необходимо хорошее понимание Java Core и опыт работы с Intellij Idea.

Введение

Spring один из самых популярных фреймворков для J2EE. Разработчики по всему миру используют Spring для создания надёжных и качественных приложений. Он был разработан в Июне 2003 года Родом Джонсоном.

С помощью Spring можно разработать любое Java приложение.

Внедрение зависимостей (Dependency Injection)

Невозможно понять, что такое Spring без понимания термина Dependency Injection (DI)  – один из видов инверсии управления (Inversion of Control – IoC).

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

Так что же DI такое?

Это ситуация, когда мы внедряем элемент одного класса в другой (конкретные примеры мы рассмотрим позже). На практике DI осуществляется путём передачи параметров конструктора или с помощью setter-ов.

Другим ключевым компонентом Spring является

Аспекто-ориентированное программирование (Aspect oriented programming – AOP)

Это функции, которые охватывают несколько узлов приложения, называются cross-cutting concerns и эти cross-cutting concerns отделены от непосредственной бизнес-логики приложения.

Примечание: придётся немного потерпеть и почитать пока непонятные термины, но позже, на практике, всё станет существенно яснее.

В ООП ключевой единицей является класс, в то время, как в АОП ключевым элементом является аспект. DI помогает разделить классы приложения на отдельные модули, и АОП – помогает отделить cross-cutting concerns от объектов на которые они влияют. Более подробно АОП будет рассмотрено далее. Крайней вещью, которая будет рассмотрена в этом руководстве будет непосредственно Архитектура Spring Framework. На данный момент Spring разделён на некоторое количество отдельных модулей, что позволяет Вам самим решать, какие из них использовать в Вашем приложении.

spring_architecture

Основной контейнер (Core Container) включает в себя Beans, Core, Context и SpEL (expression language).

Beans отвечает за BeanFactory которая является сложной реализацией паттерна Фабрика (GoF).

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

Context построен на основе Beans и Core и позволяет получить доступ к любому объекту, который определён в настройках. Ключевым элементом модуля Context является интерфейс ApplicationContext.

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

Контейнер Data Access/Integration состоит из JDBC, ORM, OXM, JMS и модуля Transatcions.

JDBC обеспечивает абстрактный слой JDBC и избавляет разработчика от необходимости вручную прописывать монотонный код, связанный с соединением с БД.

ORM обеспечивает интеграцию с такими популярными ORM, как Hibernate, JDO, JPA и т.д.

Модуль OXM отвечает за связь Объект/XML – XMLBeans, JAXB и т.д.

Модуль JMS (Java Messaging Service) отвечает за создание, передачу и получение сообщений.

Transactions поддерживает управление транзакциями для классов, которые реализуют определённые методы.

Web

Этот слой состоит из Web, Web-MVC, Web-Socket, Web-Portlet

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

Web-MVC содержит реализацию Spring MVC для веб-приложений.

Web-Socket обеспечивает поддержку связи между клиентом и сервером, используя Web-Socket-ы в веб-приложениях.

Web-Portlet обеспечивает реализацию MVC в среде портлетов.

Прочее

Spring также включает в себя ряд других важных модулей, таких как AOP, Aspects, Instrumentation, Messaging и Test

AOP реализует аспекто-ориентированное программирование и позволяет использовать весь арсенал возможностей АОП.

Модуль Aspects обеспечивает интеграцию с AspectJ, которая также является мощным фреймворком АОП.

Instrumentation отвечает за поддержку class instrumentation и class loader, которые используются в серверных приложениях.

Модуль Messaging обеспечивает поддержку STOMP.

И наконец, модуль Test обеспечивает тестирование с использованием TestNG или JUnit Framework.

На этом я завершаю вводную часть нашего руководства по Spring. В следующей части рассмотрим как создать простое Spring приложение с помощью IDE Intellij Idea.