ApplicationContext
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.
Явное обращение к контексту полезно для понимания механики и отдельных инфраструктурных задач.