Ответ
IoC-контейнер в Spring — это ядро фреймворка, которое реализует принцип Inversion of Control. Он отвечает за создание, конфигурацию и управление жизненным циклом объектов (бинов), а также за внедрение их зависимостей (Dependency Injection).
Основные интерфейсы контейнера — BeanFactory (базовый) и ApplicationContext (расширенный, с дополнительными функциями).
Пример бина с внедрением зависимости:
@Service // Аннотация помечает класс как бин, управляемый Spring
public class OrderService {
private final PaymentService paymentService;
// Внедрение зависимости через конструктор (рекомендуемый способ)
@Autowired
public OrderService(PaymentService paymentService) {
this.paymentService = paymentService; // Spring сам найдёт и передаст нужный бин
}
}
Как работает IoC-контейнер Spring:
- Обнаружение бинов: Сканирует классы с аннотациями (
@Component,@Service,@Repositoryи др.) или читает XML-конфигурацию. - Создание бинов: Инстанциирует классы и управляет их областью видимости (scope), например, singleton или prototype.
- Внедрение зависимостей: Автоматически связывает бины, внедряя их через конструктор, сеттеры или поля.
- Управление жизненным циклом: Вызывает методы обратного вызова (например,
@PostConstruct).
Преимущества: Уменьшает связанность кода, централизует конфигурацию и упрощает тестирование.