Ответ
ApplicationContext — это центральный IoC-контейнер в Spring, который является практической реализацией принципа инверсии управления (Inversion of Control).
Связь IoC и ApplicationContext:
- Принцип IoC: Передача ответственности за создание объектов и управление их зависимостями от самого приложения (кода разработчика) на внешний фреймворк (контейнер).
- Реализация через ApplicationContext: Контейнер берет на себя роль этого "внешнего фреймворка". Он:
- Создает объекты (бины) на основе конфигурации (аннотации, XML, Java Config).
- Управляет их жизненным циклом (вызывает методы инициализации и уничтожения).
- Внедряет зависимости (Dependency Injection) между бинами, связывая их автоматически.
Пример перехода от обычного кода к IoC через ApplicationContext:
// Традиционный подход (прямое управление)
class TraditionalService {
private Repository repository = new JdbcRepository(); // Зависимость создается вручную
}
// Подход с Spring IoC (управление через ApplicationContext)
@Configuration
class AppConfig {
@Bean
public Repository repository() {
return new JdbcRepository(); // Контейнер создает бин
}
@Bean
public Service service(Repository repo) { // Контейнер внедряет зависимость
return new Service(repo);
}
}
// ApplicationContext создает и связывает бины
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
Service service = ctx.getBean(Service.class); // Готовый к использованию бин со всеми зависимостями
Таким образом, ApplicationContext инвертирует контроль: не код ищет зависимости, а контейнер предоставляет их готовыми.