Обзор контейнера 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)).
Читайте также:
- Обзор контейнера IoC Spring, метаданные конфигурации
- Обзор контейнера IoC Spring, создание контейнера
- Обзор контейнера IoC Spring, создание контейнера: определение бинов с помощью Groovy DSL
Комментарии
Отправить комментарий