Руководство по Spring. Контейнеры IoC.

Ключевым элементов Spring Framework является Spring Container. Container создаёт объекты, связывает их вместе, настраивает и управляет ими от создания до момента уничтожения.

Для управления компонентами, из которых состоит приложение, Spring Container использует Внедрение Зависимостей (DI). Эти объекты называются Spring Beans, которые мы обсудим далее.

Spring Container получает инструкции какие объекты инстанциировать и как их конфигурировать через метаданные.

Метаданные могут быть получены 3 способами:
– XML
– Аннотации Java
– Java код

IoC

На картинке, которая находится выше схематично показан этот процесс.
Java POJO классы поступает в Spring Container, который на основании инструкций, полученных через метаданные, выдаёт приложение, готовое к использованию.

В Spring имеется 2 различных вида контейнеров:
1. Spring BeanFactory Container;
2. Spring ApplicationContext Container;

Spring BeanFactory Container

Это самый простой контейнер, который обеспечивает базовую поддержку DI и который основан на интерфейсе org.springframework.beans.factory.BeanFactory. Такие интерфейсы, как BeanFactoryAware и DisposableBean всё ещё присутствуют в Spring для обеспечения обратной совместимости.
Наиболее часто используемая реализация интерфейса BeanFactory – XmlBeanFactory.
XmlBeanFactory получает метаданные из конфигурационного XML файла и использует его для создания настроенного приложения или системы.

BeanFactory обычно используется тогда, когда ресурсы ограничены (мобильные устройства). Поэтому, если ресурсы не сильно ограничены, то лучше использовать ApplicationContext.

Пример

Создайте Spring проект в IntellijIdea (Пункт №1 из “Руководство по Spring. Создание простого приложения.”)

Структура проекта:

1

Класс Message.java

2

Конфигурационный файл message-bean.xml

3

Класс MessageRunnerWithBeanFactory.java

4

Результат работы программы

5

Исходный код проекта по ЭТОЙ ССЫЛКЕ.

Spring ApplicationContext Container

ApplicationContext является более сложным и более продвинутым Spring Container-ом. Так же, как BeanFactory, ApplicationContext загружает бины, связывает их вместе и конфигурирует их определённым образом.Но кроме этого, ApplicationContext обладает дополнительной функциональностью: распознание текстовых сообщений из файлов настройки и отображение событий, которые происходят в приложении различными способами. Этот контейнер определяется интерфейсом org.springframework.context.ApplicationContext.

Чаще всего используются следующие реализации AppicationContext:

FileSystemXmlApplicationContext
Загружает данные о бине из XML файла. При использовании этой реализации в конструкторе необходимо указать полный адрес конфигурационного файла.

ClassPathXmlApplicationContext
Этот контейнер также получает данные о бине из XML файла. Но в отличие от FileSystemApplicationContext, в этом случае необходимо указать относительный адрес конфигурационного файла (CLASSPATH).

WebXmlApplicationContext
Эта реализация ApplicationContext получает необходимую информацию из веб-приложения.

В примере создания простого Spring приложения мы уже использовали ClassPathXmlApplicationContext. Теперь мы попробуем использовать FileSystemXmlApplicationContext.

Пример

Создайте Spring проект в IntellijIdea (Пункт №1 из “Руководство по Spring. Создание простого приложения.”)

Структура проекта:

1

Класс Message.java

2

Конфигурационный файл message-bean.xml

3

Класс MessageRunnerWithFileSystemApplicationContext.java

3

Результат работы программы

6

Исходный код проекта доступен по ЭТОЙ ССЫЛКЕ.

Заключение
Как мы увидели из этого руководства – контейнер ApplicationContext обладает большей функциональностью, чем BeanFactory, поэтому если мы не находимся в условиях крайней ограниченности ресурсов, более предпочтительным является использование ApplicationContext.