Архитектура Spring
Spring – это легковесный открытый фреймворк, упрощающий разработку корпоративных
(J2EE) приложений и нацеленный на использование простых JavaBean (обычный Java класс, который ни от кого не наследуется и максимум,
что делает - это реализует какой-нибудь интерфейс) объектов.
Что такое Spring?
-
Легковесный. 2.5 мегабайт и приложение не зависит от классов Spring-а, те есть мы нигде не делаем наследования от Spring и никак
от него не зависим, максимум мы можем реализовывать какой-нибудь интерфейс. Получается, что наше приложение реализует логику, а
за дополнительными сервисами мы просто обращаемся к Spring, вызывая его методы. Причем вызов делается таким образом, что мы в
основном вызываем тоже интерфейсы, а реализация у этих интерфейсов может быть разная, то есть Spring предлагает несколько реализаций
для разных платформ, например, различная реализация доступа к данным итд.
Также Spring можно использовать в маленьких приложениях.
-
Инверсия контроля (или инъекция зависимостей). Классы не создают своих зависимостей, они их
получают (через метод setter можно получить любой сервис). Зависимость? То есть один класс зависит от другого класса. Например,
наш какой-нибудь сервис выполняет отправку почты. Получается, что наш сервис зависит от сервиса отправки почты. В IoC суть заключается
в том, что мы не создаем сервис отправки почты (new MailService и далее вызов методов), а мы его получаем. По сути мы получаем на вход,
например, через setter или как угодно, но мы получаем Service и дальше делаем с ним, что угодно. Интересно здесь, то, что мы можем
получить любой MailService.
-
Аспектно-ориентированный. Используется AspectJ. В Spring есть своя реализация АОП, но все же лучше использовать AspectJ.
Если коротко, то АОП - это выделение сквозной функциональности в отдельные модули. Например, функциональность, которая занимается
управлением транзакцией, то есть эта функциональность выносится в отдельный модуль и дополнение к функциональности тоже выносится в
отдельный модуль. Потом определяем, что такой-то и такой-то метод будут участвовать в транзакции. То есть это позволяет локализовать
все, что связано со сквозной функциональностью в одном месте.
-
Spring - это контейнер объектов. Это означает, что Spring хранит в себе объекты, он их создает и управляет их жизненным циклом. По сути
это означает, что мы нигде не вызываем оператор new (через Spring не вызываем конструктор, то есть не используем new).
Если нам понадобился какой-нибудь объект, то нужно обращаться к контейнеру Spring и он его выдает. Как он его выдает - это все
можно настроить. Например, либо через new, либо будет выдавать Singleton, либо будет выдавать из пула объектов. IoC работает благодаря
тому, что все объекты находятся в одном контейнере.
-
Фреймворк. Значит, что есть возможность, компоновать сложные приложения из простых компонент,
настраиваемых в конфигурационных файлах. Также фреймворк упрощает выполнение и управление J2EE
функциями в приложении (транзакции, сообщения, веб).
Архитектура Spring
-
IoC – главный модуль
-
AOP – Spring может подключиться к программе в любой точке и выполнить там нужный код
-
Service Abstraction – абстрагируем благодаря тому, что мы вызываем интерфейсы Spring-а и
вызываем его методы для работы. За счет этого он абстрагирует от всего остального
(Web remoting, EJB, JMS, Scheduling итп).
-
DAO – для работы с БД
-
ORM – JPA, hibername
-
WEB – классы, которые помогают упростить разработку Web (авторизация, доступ к бинам Spring-а из web)
-
MVC – создает web