Прим. Отсутствие в русском языке достойного перевода этого свойства бинов могут вызвать затруднения, но после прочтения этой статьи оно должно испариться.
Когда мы определяем 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, так как был создан абсолютно новый объект, которому мы ничего не присваивали.
В следующем уроке мы с Вами рассмотрим жизненный цикл бинов, а на сегодня всё. До связи.