Что такое контекст (Context) в Spring и зачем он нужен?

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

Ответ

В Spring контекст приложения (ApplicationContext) — это центральный интерфейс, который предоставляет конфигурацию приложения. Это "контейнер", который инстанцирует, настраивает и управляет жизненным циклом объектов (бинов), связывая их вместе в соответствии с конфигурацией.

Основные задачи ApplicationContext:

  1. Управление бинами (Inversion of Control / Dependency Injection): Создает объекты и внедряет зависимости между ними.
  2. Доступ к конфигурации: Предоставляет единый способ загрузки конфигурационных метаданных (аннотации, XML, Java-конфигурация).
  3. Публикация и обработка событий: Поддерживает механизм событий для слабой связи между компонентами.
  4. Интернационализация (i18n): Упрощает работу с сообщениями для разных локалей.
  5. Доступ к ресурсам: Упрощает загрузку файлов (например, из classpath или файловой системы).

Пример:

// Создание контекста (в Spring Boot это делается автоматически)
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

// Получение бина из контекста
MyService service = context.getBean(MyService.class);
service.execute();

Почему это важно? Контекст освобождает разработчика от ручного создания и связывания объектов, что делает код более модульным, тестируемым и легким в поддержке. Он является основой для всех функций фреймворка Spring.