Инструменты пользователя

Инструменты сайта


фреймворки:core:инверсия_управления_в_spring

Инверсия управления и внедрение зависимостей в Spring

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

Работает это следующим образом. Если объекту какого-то класса для работы нужен объект другого класса (подразумевается, что данные объекты реализуют программную логику, а не являются носителями каких-то данных), например, сервису, обрабатывающему паспортные данные, нужен объект сервиса, умеющего ходить в МВД и проверять действительность самого паспорта, то этот обрабатывающий паспорта сервис никогда не создаёт экземпляр сервиса проверки самостоятельно с помощью конструктора или фабричного метода. Обрабатывающий паспорта сервис указывает контейнеру эту зависимость одним из следующих способов:

  • Объявляет его аргументом своего конструктора
  • Объявляет его аргументом фабричного метода
  • Объявляет его своим полем

Подразумевается, что и объект класса-обработчика паспортов, и объект сервиса проверки, будут созданы контейнером Spring'а (именно контейнер выполнит оператор new для создания обоих объектов). И контейнер также позаботится о том, чтобы внутри объекта класса-обработчика была ссылка на объект класса, проверяющего действительность.

Основные пакеты

Классы, отвечающие за инверсию управления и внедрение зависимостей в Spring, расположены в следующих пакетах

  • org.springframework.beans
  • org.springframework.context

Контейнер

Базовый интерфейс, описывающий контейнер Spring'а, называется BeanFactory (Фабрика бинов). Он расширяется интерфейсом ApplicationContext (Контекст приложения), который расширяет функциональность контейнера до привычного всем уровня. Поэтому обычно, когда говорят о спринговом контейнере, который создаёт и внедряет зависимости, а также выполняет другой функционал, то имеют в виду ApplicationContext и его имплементации.

Так, помимо создания и внедрения компонентов, ApplicationContext предоставляет следующие функции:

  • Интеграцию с Аспектно-ориентированными возможностями Spring'а
  • Управление мультиязычными версиями сообщений в приложении
  • Публикацию событий
  • Предоставляет контексты, специфичные для разных типов приложений

Программные компоненты (Spring beans)

Если класс реализует какую-то программную логику, должен создаваться контейнером, внедряться в другие программные компоненты и, возможно, требует, чтобы в него были внедрены другие компоненты, то говорят, что объектом такого класса управляет Spring и он называется бином (Spring bean).


Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki