Что такое IoC-контейнер в Spring?

«Что такое IoC-контейнер в Spring?» — вопрос из категории Spring, который задают на 23% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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:

  1. Обнаружение бинов: Сканирует классы с аннотациями (@Component, @Service, @Repository и др.) или читает XML-конфигурацию.
  2. Создание бинов: Инстанциирует классы и управляет их областью видимости (scope), например, singleton или prototype.
  3. Внедрение зависимостей: Автоматически связывает бины, внедряя их через конструктор, сеттеры или поля.
  4. Управление жизненным циклом: Вызывает методы обратного вызова (например, @PostConstruct).

Преимущества: Уменьшает связанность кода, централизует конфигурацию и упрощает тестирование.