JavaRush/Курсы/Модуль 5. Spring/Использование IoC-контейнера

Использование IoC-контейнера

Открыта

ApplicationContext - это интерфейс для продвинутой фабрики, способной поддерживать реестр различных бинов и их зависимостей. Используя метод T getBean(String name, Class<T> requiredType), можно получить экземпляры бинов.

ApplicationContext позволяет читать определения бинов и получать к ним доступ, как показано в следующем примере:

Java
// создаем и конфигурируем бины
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
// получаем сконфигурированный экземпляр
PetStoreService service = context.getBean("petStore", PetStoreService.class);
// используем сконфигурированный экземпляр
List<String> userList = service.getUsernameList();
Kotlin
import org.springframework.beans.factory.getBean
// создаем и конфигурируем бины
val context = ClassPathXmlApplicationContext("services.xml", "daos.xml")
// получаем сконфигурированный экземпляр
val service = context.getBean<PetStoreService>("petStore")
// используем сконфигурированный экземпляр
var userList = service.getUsernameList()

При использовании конфигурации Groovy начальная загрузка выглядит очень схожим образом. У неё есть другой класс реализации контекста, который поддерживает Groovy (но также понимает определения XML-бинов). В следующем примере показана конфигурация Groovy:

Java
ApplicationContext context = new GenericGroovyApplicationContext("services.groovy", "daos.groovy");
Kotlin
val context = GenericGroovyApplicationContext("services.groovy", "daos.groovy")

Наиболее гибким вариантом является GenericApplicationContext в сочетании с делегатами считывания, например, с XmlBeanDefinitionReader для файлов XML, как показано в следующем примере:

Java
GenericApplicationContext context = new GenericApplicationContext();
new XmlBeanDefinitionReader(context).loadBeanDefinitions("services.xml", "daos.xml");
context.refresh();
Kotlin
val context = GenericApplicationContext()
XmlBeanDefinitionReader(context).loadBeanDefinitions("services.xml", "daos.xml")
context.refresh()

Также можно использовать GroovyBeanDefinitionReader для файлов Groovy, как показано в следующем примере:

Java
GenericApplicationContext context = new GenericApplicationContext();
new GroovyBeanDefinitionReader(context).loadBeanDefinitions("services.groovy", "daos.groovy");
context.refresh();
Kotlin
val context = GenericApplicationContext()
GroovyBeanDefinitionReader(context).loadBeanDefinitions("services.groovy", "daos.groovy")
context.refresh()

Можно смешивать и сочетать такие делегаты считывания на одном и том же ApplicationContext, считывая определения бинов из различных источников конфигурации.

Затем можно использовать getBean для получения экземпляров бинов. Интерфейс ApplicationContext имеет несколько других методов для получения бинов, но, в идеале, в коде приложения их никогда не следует использовать. Действительно, в коде вашего приложения не должно быть вызовов метода getBean() вообще, и поэтому он вообще не должен зависеть от API-интерфейсов Spring. Например, интеграция Spring с веб-фреймворками обеспечивает внедрение зависимостей для различных компонентов веб-фреймворка, таких как контроллеры и управляемые JSF-бины, что позволит объявить зависимость от конкретного бина с помощью метаданных (например, аннотации автоматического обнаружения и связывания (autowiring)).

Комментарии (3)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Родион
Уровень 113
13 августа 2025, 12:19
в чем прикол брать лекции на английском, закидывать их в гугл транслэйт и пихать сюда без каких-либо изменений? Даже бесплатные статьи на фоне этого выглядят в сотни раз лучше, уже не говоря о том что новичку тут будет крайне и крайне сложно разобраться
NevesomiyBackend Developer в Soft-Club
22 ноября 2023, 06:59
Я как мобильный разработчик далекий от Springа - но какого черта лекция описывается на XML конфигурации вместо Аннотаций?
Дмитрий
Уровень 102
Expert
28 января 2024, 16:33
Ну, какие-нибудь легаси проекты могут на них быть, например.