ApplicationContext
- это интерфейс для продвинутой фабрики, способной поддерживать реестр различных бинов и их зависимостей. Используя метод T getBean(String name, Class<T> requiredType)
, можно получить экземпляры бинов.
ApplicationContext
позволяет читать определения бинов и получать к ним доступ, как показано в следующем примере:
// создаем и конфигурируем бины
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
// получаем сконфигурированный экземпляр
PetStoreService service = context.getBean("petStore", PetStoreService.class);
// используем сконфигурированный экземпляр
List<String> userList = service.getUsernameList();
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:
ApplicationContext context = new GenericGroovyApplicationContext("services.groovy", "daos.groovy");
val context = GenericGroovyApplicationContext("services.groovy", "daos.groovy")
Наиболее гибким вариантом является GenericApplicationContext
в сочетании с делегатами считывания, например, с XmlBeanDefinitionReader
для файлов XML, как показано в следующем примере:
GenericApplicationContext context = new GenericApplicationContext();
new XmlBeanDefinitionReader(context).loadBeanDefinitions("services.xml", "daos.xml");
context.refresh();
val context = GenericApplicationContext()
XmlBeanDefinitionReader(context).loadBeanDefinitions("services.xml", "daos.xml")
context.refresh()
Также можно использовать GroovyBeanDefinitionReader
для файлов Groovy, как показано в следующем примере:
GenericApplicationContext context = new GenericApplicationContext();
new GroovyBeanDefinitionReader(context).loadBeanDefinitions("services.groovy", "daos.groovy");
context.refresh();
val context = GenericApplicationContext()
GroovyBeanDefinitionReader(context).loadBeanDefinitions("services.groovy", "daos.groovy")
context.refresh()
Можно смешивать и сочетать такие делегаты считывания на одном и том же ApplicationContext
, считывая определения бинов из различных источников конфигурации.
Затем можно использовать getBean
для получения экземпляров бинов. Интерфейс ApplicationContext
имеет несколько других методов для получения бинов, но, в идеале, в коде приложения их никогда не следует использовать. Действительно, в коде вашего приложения не должно быть вызовов метода getBean()
вообще, и поэтому он вообще не должен зависеть от API-интерфейсов Spring. Например, интеграция Spring с веб-фреймворками обеспечивает внедрение зависимостей для различных компонентов веб-фреймворка, таких как контроллеры и управляемые JSF-бины, что позволит объявить зависимость от конкретного бина с помощью метаданных (например, аннотации автоматического обнаружения и связывания (autowiring)).
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ