Ответ
IoC-контейнер (контейнер инверсии управления) в Spring — это ядро фреймворка, ответственное за создание, конфигурацию и управление жизненным циклом объектов, называемых бинами (beans), а также за разрешение их зависимостей.
Основные обязанности контейнера:
- Создание бинов на основе определений (аннотации, XML, Java-конфигурация).
- Внедрение зависимостей (Dependency Injection) между бинами.
- Управление жизненным циклом: вызов методов инициализации (
@PostConstruct) и уничтожения (@PreDestroy).
Два основных интерфейса контейнера:
BeanFactory— базовый контейнер, предоставляющий основные возможности DI.ApplicationContext— расширенный контейнер, наследующийBeanFactoryи добавляющий:- Интеграцию с AOP (аспектно-ориентированное программирование).
- Управление событиями (ApplicationEvent).
- Поддержку интернационализации (i18n).
- Удобные способы загрузки ресурсов.
- Наследование контекстов (родительский/дочерний).
Пример работы:
// 1. Контейнер (ApplicationContext) создается при запуске приложения
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
// 2. Контейнер создает все бины, описанные в @Configuration-классе AppConfig
// 3. Контейнер внедряет зависимость UserRepository в UserService
UserService service = context.getBean(UserService.class); // Получаем готовый, сконфигурированный бин
Контейнер избавляет разработчика от необходимости писать шаблонный код для создания и связывания объектов.