Ответ
Контейнер Spring (Spring IoC Container) — это ядро фреймворка, отвечающее за создание объектов (бинов), управление их жизненным циклом, конфигурацию и связывание зависимостей между ними (Dependency Injection).
Основные реализации:
BeanFactory— базовый интерфейс, предоставляет минимальную функциональность для управления бинами.ApplicationContext— расширяетBeanFactory, добавляя enterprise-функции:- Интеграцию с AOP
- Управление событиями (
ApplicationEvent) - Интернационализацию (i18n)
- Загрузку ресурсов
- Объявление бинов через аннотации (
@Component,@Serviceи др.)
Как это работает:
- Контейнер читает конфигурацию (XML, Java-конфиг, аннотации).
- Создает граф объектов, разрешая зависимости (например, внедряет
UserServiceвUserController). - Управляет бинами от создания до уничтожения, вызывая callback-методы (например,
@PostConstruct).
Пример создания и использования:
// Конфигурация с аннотациями
@Configuration
@ComponentScan("com.example")
public class AppConfig { }
// Создание контейнера
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
// Получение бина из контейнера
UserService userService = context.getBean(UserService.class);
userService.process(); // Бин и его зависимости уже настроены контейнером
Жизненный цикл бина: Instantiation → Population of properties → BeanNameAware → BeanFactoryAware → @PostConstruct → InitializingBean → Бин готов → @PreDestroy → DisposableBean.
Контейнер инвертирует контроль: не приложение создает зависимости, а контейнер предоставляет их приложению (Inversion of Control).