Область видимости бинов

Когда мы определяем bean в Spring Framework, у нас есть возможность объявить область видимости этого компонента.

Например, если мы хотим, чтобы Spring возвращал нам один и тот же бин при каждом запросе, мы должны выбрать область видимости singleton.

В Spring Framework имеются пять возможных значений свойства scope:


singleton

Определяет один единственный бин для каждого контейнера Spring IoC (используется по умолчанию).

prototype

Позволяет иметь любое количество экземпляров бина.

request

Создается один экземпляр бина на каждый HTTP-запрос. Касается исключительно ApplicationContext.

session

Создается один экземпляр бина на каждую HTTP-сессию. Касается исключительно ApplicationContext.

global-session

Создается один экземпляр бина на каждую глобальную HTTP-сессию. Касается исключительно ApplicationContext.


На данный момент мы еще не касались Spring ApplicationContext, поэтому сейчас обсудим только singleton и prototype.

Singleton

Если мы устанавливаем свойству scope значение singleton, то в это случае контейнер Spring IoC создает только один экземпляр объекта, определенного в бине. Этот экземпляр помещается в кэш таких же бинов (синглетонов), и все последующие вызовы бина с таким именем будут возвращать объект из кэша.

По умолчанию в область видимости устанавливается singleton, но если вы хотите акцентировать внимание на этом, то можно использовать такую запись:

<bean id = "someBean" scope = "singleton"> <!--some code to configure bean--> </bean>

Пример небольшой программы:

Архив с исходным кодом проекта можно скачать по ЭТОЙ ССЫЛКЕ.

Структура программы

Класс Message.java

Класс MessageRunner.java

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

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

Prototype

Когда мы присваиваем свойству scope значение prototype, контейнер Spring IoC создает новый экземпляр бина на каждый полученный запрос.

Бин с областью видимости prototype можно создать следующим образом:

<bean id = "someBean" scope = "prototype"> <!--some code to configure bean--> </bean>

Пример простого приложения:

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

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

Класс Message.java

Класс MessageRunner.java

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

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

Как мы могли увидеть, в случае применения singleton, мы получили два одинаковых сообщения, так как использовался один и тот же экземпляр бина. В то время, как при использовании prototype, мы получили во втором сообщении null так, как был создан абсолютно новый объект, которому мы ничего не присваивали.

results matching ""

    No results matching ""