Обзор контейнера IoC Spring, использование контейнера

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

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

Java

// создаем и настраиваем bean-компоненты
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

// создаем и настраиваем bean-компоненты
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, читая определения bean-компонентов из различных источников конфигурации.

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


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки