Какой основной класс или интерфейс представляет контейнер IoC в Spring?

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

Ответ

Основной интерфейс: org.springframework.context.ApplicationContext — это центральный контейнер Inversion of Control (IoC), управляющий жизненным циклом бинов, их конфигурацией и зависимостями.

Ключевые обязанности:

  • Создание и связывание бинов на основе конфигурации (XML, аннотации, Java-код).
  • Управление жизненным циклом (вызов методов инициализации и уничтожения).
  • Предоставление доступа к бинам и переменным окружения.

Основные реализации:

  • ClassPathXmlApplicationContext — для XML-конфигурации в classpath.
    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
  • AnnotationConfigApplicationContext — для конфигурации через Java-классы и аннотации.
    ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
  • WebApplicationContext — специализация для веб-приложений.

Важные методы:

  • T getBean(Class<T> requiredType) — получить бин по типу.
  • Object getBean(String name) — получить бин по имени.
  • boolean containsBean(String name) — проверить существование бина.
  • Environment getEnvironment() — получить доступ к профилям и свойствам.

В Spring Boot контейнер создается автоматически через аннотацию @SpringBootApplication, которая включает сканирование компонентов и автоконфигурацию.