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

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

Spring
1 уровень , 3 лекция
Открыта

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)).

Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Nevesomiy Уровень 22
22 ноября 2023
Я как мобильный разработчик далекий от Springа - но какого черта лекция описывается на XML конфигурации вместо Аннотаций?
Дмитрий Уровень 99 Expert
28 января 2024
Ну, какие-нибудь легаси проекты могут на них быть, например.