Ответ
ApplicationContext — это расширенный контейнер инверсии управления (IoC) в Spring, который не только управляет бинами и их зависимостями, но и предоставляет множество enterprise-функций.
Ключевые возможности:
-
Управление бинами (Bean Factory):
- Создание, конфигурация и управление жизненным циклом бинов.
- Внедрение зависимостей (Dependency Injection).
MyService service = context.getBean(MyService.class);
-
Доступ к конфигурации: Загрузка конфигурации из различных источников:
- Аннотации (
@ComponentScan,@Configuration). - XML-файлы.
- Java-классы конфигурации (
@Bean). - Properties-файлы (
@PropertySource).
- Аннотации (
-
Международализация (i18n): Доступ к сообщениям через
MessageSource.String message = context.getMessage("greeting", null, Locale.ENGLISH); -
Публикация и обработка событий: Поддержка событий приложения по модели Observer.
context.publishEvent(new CustomEvent(this, data)); -
Доступ к ресурсам: Унифицированный API для работы с ресурсами (файлы, URL) через
ResourceLoader.Resource resource = context.getResource("classpath:config.properties"); -
Профили и окружения: Управление конфигурацией для разных сред (dev, prod) с помощью
@ProfileиEnvironment.Environment env = context.getEnvironment(); boolean isDev = env.acceptsProfiles("dev"); -
Интеграция с AOP: Прозрачное применение аспектов для cross-cutting concerns (логирование, транзакции).
Почему ApplicationContext предпочтительнее BeanFactory? Он предоставляет более полный набор enterprise-функций (события, i18n, интеграция с AOP «из коробки»), в то время как BeanFactory — это базовый, более легковесный контейнер.