ApplicationContext

Базовый Spring
≈ 2 мин чтения

ApplicationContext — центральная точка Spring

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

Контекст создаётся при запуске приложения. После этого большая часть кода работает уже не с самим контейнером, а с объектами, которые он подготовил.

@Configuration
class AppConfig {

    @Bean
    GreetingService greetingService() {
        return new GreetingService();
    }
}

public class Main {
    public static void main(String[] args) {
        try (var context = new AnnotationConfigApplicationContext(AppConfig.class)) {
            var service = context.getBean(GreetingService.class);
            service.greet();
        }
    }
}

В примере AnnotationConfigApplicationContext создаёт контекст на основе Java-конфигурации. Вызов getBean() не создаёт случайный новый объект вручную — мы просим контейнер дать экземпляр, которым он управляет.

Что ещё умеет контекст

ApplicationContext отвечает не только за хранение объектов. Через него Spring также предоставляет инфраструктуру для событий, ресурсов, сообщений и других возможностей фреймворка. Но его главная роль для нас сейчас — быть местом, где живёт граф связанных объектов приложения.

Не превращай getBean() в обычный способ получать зависимости. В прикладном коде зависимости обычно передаются самим контейнером через DI. Явное обращение к контексту полезно для понимания механики и отдельных инфраструктурных задач.