Введение
Spring — один из самых популярных фреймворков для веб-разработки. Разработчики по всему миру используют 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, они отделены от непосредственной бизнес-логики приложения.
Примечание: придется немного потерпеть и почитать непонятные пока термины, но позже, на практике, все станет существенно яснее.
В ООП ключевой единицей является класс, в то время как в АОП ключевым элементом является аспект. DI помогает разделить классы приложения на отдельные модули, и АОП помогает отделить cross-cutting concerns от объектов, на которые они влияют. Более подробно АОП будет рассмотрено далее. Крайней вещью, которая будет рассмотрена в этом руководстве, будет непосредственно Архитектура Spring Framework. На сегодняшний день Spring разделен на некоторое количество отдельных модулей, что позволяет Вам самим решать, какие из них использовать в Вашем приложении.
Основной контейнер (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.