Контейнер Inversion of Control (IoC) в Spring — главный компонент фреймворка. Он управляет жизненным циклом Java-объектов (называемых Spring Beans), их конфигурацией и зависимостями. Вместо того чтобы объекты самостоятельно создавали и искали свои зависимости (традиционный подход с new и Service Locator), IoC-контейнер "инвертирует" управление: он создает объекты, конфигурирует их и "внедряет" (injects) необходимые зависимости.
Основные обязанности IoC-контейнера:
Принцип "инверсии управления" означает, что поток выполнения программы управляется IoC-контейнером, а не компонентами приложения напрямую. Spring предлагает две основные реализации IoC-контейнера:
BeanFactory: Простой контейнер, предоставляющий базовую функциональность. Обычно используется для ленивой инициализации бинов.ApplicationContext: Расширение BeanFactory, добавляющее множество функций, таких как поддержка интернационализации, события, загрузка ресурсов, веб-приложения и более развитое управление жизненным циклом. ApplicationContext является предпочтительной реализацией в большинстве случаев.Как работает, в общих чертах:
@Component, @Service и т.д., или классов JavaConfig). Эта конфигурация описывает, какие объекты являются бинами, как их создавать и какие у них зависимости.Пример XML-конфигурации для бина MyService с зависимостью MyRepository:
xml
Пример JavaConfig:
java
Пример использования аннотаций:
java