Какие основные возможности предоставляет ApplicationContext в Spring Framework?

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

Ответ

ApplicationContext — это расширенный контейнер инверсии управления (IoC) в Spring, который не только управляет бинами и их зависимостями, но и предоставляет множество enterprise-функций.

Ключевые возможности:

  1. Управление бинами (Bean Factory):

    • Создание, конфигурация и управление жизненным циклом бинов.
    • Внедрение зависимостей (Dependency Injection).
      MyService service = context.getBean(MyService.class);
  2. Доступ к конфигурации: Загрузка конфигурации из различных источников:

    • Аннотации (@ComponentScan, @Configuration).
    • XML-файлы.
    • Java-классы конфигурации (@Bean).
    • Properties-файлы (@PropertySource).
  3. Международализация (i18n): Доступ к сообщениям через MessageSource.

    String message = context.getMessage("greeting", null, Locale.ENGLISH);
  4. Публикация и обработка событий: Поддержка событий приложения по модели Observer.

    context.publishEvent(new CustomEvent(this, data));
  5. Доступ к ресурсам: Унифицированный API для работы с ресурсами (файлы, URL) через ResourceLoader.

    Resource resource = context.getResource("classpath:config.properties");
  6. Профили и окружения: Управление конфигурацией для разных сред (dev, prod) с помощью @Profile и Environment.

    Environment env = context.getEnvironment();
    boolean isDev = env.acceptsProfiles("dev");
  7. Интеграция с AOP: Прозрачное применение аспектов для cross-cutting concerns (логирование, транзакции).

Почему ApplicationContext предпочтительнее BeanFactory? Он предоставляет более полный набор enterprise-функций (события, i18n, интеграция с AOP «из коробки»), в то время как BeanFactory — это базовый, более легковесный контейнер.