Ответ
ApplicationContext (контекст приложения) — это центральный интерфейс в Spring, представляющий собой контейнер IoC (Inversion of Control), который отвечает за создание, конфигурацию и управление жизненным циклом объектов приложения (бинов).
Основные функции:
- Управление бинами: Создание экземпляров, внедрение зависимостей (DI), вызов методов инициализации (
@PostConstruct) и уничтожения (@PreDestroy). - Конфигурация: Объединение конфигурации из различных источников (аннотации, Java-классы, XML, свойства).
- Доступ к ресурсам: Упрощённая работа с файлами, сообщениями для интернационализации (i18n) и событиями приложения.
- Интеграция с AOP: Обеспечивает работу аспектно-ориентированного программирования (например, транзакции, кэширование).
Пример создания и использования (Java Config):
@Configuration
public class AppConfig {
@Bean
public MyRepository myRepository() {
return new MyRepositoryImpl();
}
@Bean
public MyService myService(MyRepository repo) {
return new MyServiceImpl(repo); // DI через параметр метода
}
}
public class MainApp {
public static void main(String[] args) {
// Создание контекста на основе Java-конфигурации
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
// Получение бина из контекста
MyService service = ctx.getBean(MyService.class);
service.process();
// Получение всех бинов определённого типа
Map<String, MyService> beans = ctx.getBeansOfType(MyService.class);
}
}
Типы контекстов: AnnotationConfigApplicationContext, ClassPathXmlApplicationContext, FileSystemXmlApplicationContext, WebApplicationContext (для веб-приложений).
Почему это важно: ApplicationContext — это "мозг" Spring-приложения, который связывает все компоненты вместе, управляя зависимостями и освобождая разработчика от ручного создания графа объектов.