Di Ioc

Тема дорожной карты · Spring Boot

Внедрение зависимостей и IoC (Inversion of Control, инверсия управления) — это фундаментальные принципы проектирования Spring Framework, обеспечивающие слабую связанность компонентов в Spring Boot-приложении. В рамках внедрения зависимостей и IoC Spring IoC-контейнер — представленный ApplicationContext — отвечает за создание, настройку и сборку бинов, вместо того чтобы объекты сами создавали свои зависимости. Spring Boot реализует внедрение зависимостей через инъекцию через конструктор (рекомендуется), инъекцию через сеттер и инъекцию через поле с помощью @Autowired, а контейнер использует аннотации @Component, @Service, @Repository, @Controller и @Configuration для обнаружения и регистрации бинов. IoC инвертирует традиционный поток управления: вместо того чтобы класс вызывал new SomeDependency(), Spring-контейнер внедряет бин SomeDependency, делая класс самостоятельно тестируемым путём передачи mock-реализаций в модульных тестах. Освоение внедрения зависимостей и IoC является обязательным условием для понимания авто-конфигурации Spring Boot, репозиториев Spring Data JPA, цепочек фильтров Spring Security и любого другого модуля Spring Framework, опирающегося на жизненный цикл бинов, управляемых контейнером.

Как это работает

Di Ioc (Dependency Injection + Inversion of Control): Spring-контейнер инстанцирует + связывает ваши бины вместо new везде. @Component (и стереотипы @Service, @Repository, @Controller) маркируют класс как Spring-managed bean; @Bean-методы в @Configuration-классе производят явные бины. @Autowired инжектит зависимости. Bean scopes (singleton дефолт, prototype, request, session) контролируют lifetime. Lifecycle hooks (@PostConstruct, @PreDestroy) запускают init/cleanup.

Когда применять

Предпочитайте constructor injection (final поля + @RequiredArgsConstructor через Lombok) — immutable, тестируемо, fail fast на отсутствующих зависимостях. Field/setter injection только для legacy. Бины stateless; singleton + state = concurrent-баги. Не инжектьте ApplicationContext чтобы "найти" бины — это service locator + ломает IoC.

Типичные ошибки

Ловушки Di Ioc: field injection (тяжело тестировать, скрывает constructor-зависимости); circular зависимости (Spring 3.x отклоняет по дефолту — фиксите дизайн); singleton-бины с mutable state (race conditions); @Autowired на non-final поле, переприсваиваемом позже (тихие баги).

Связанные понятия

Полезные ресурсы