Статьи

Spring: удовлетворение нескольких запросов с помощью Singleton Bean

Узнайте больше об обслуживании нескольких запросов с помощью Spring bean!

Когда я впервые начал изучать Spring, у меня возникли два «трудных» вопроса:

  1. Как создается синглтон?
  2. И как этот единственный компонент автоматически подключается в разных классах?

Вам также может понравиться: Spring Bean Lifecycle

    Представьте себе следующий сценарий:

    Есть два пользователя. Один из них хочет войти в систему, а другой хочет одновременно создать отчет в нашем приложении. И оба, loginи createReportметоды используют userServicebean-компонент, который определен как синглтон. В этом случае используют ли эти методы этот одноэлементный компонент последовательно? Иначе, как одноэлементный бин обслуживает несколько запросов одновременно?

    Отвечать на эти вопросы было не так сложно, как я изначально думал. Нужно было только уточнить простые, но важные моменты. Вот почему я попытаюсь описать их с помощью основных примеров кода. Давайте начнем:

    1. Было бы полезно, если мы сначала поговорим о контейнерах Spring. Потому что я думаю, что это поможет вам лучше описать процесс в вашем уме.

    Контейнер Spring создает в нем bean-компоненты. После создания необходимых компонентов он вводит зависимости от них. Контейнер получает свои инструкции, читая метаданные конфигурации (аннотации XML или Java). Таким образом, после инициализации контейнера Spring ваше приложение готово к использованию, как описано на следующем рисунке:

    Когда вы определяете определение компонента, как показано ниже, вы сообщаете контейнеру, что он должен создать только один экземпляр для этого определения компонента в контейнере:

    <bean id=”accountDao” class=”…” scope=”singleton”/>

    Этот единственный экземпляр хранится в кэше таких синглтон-бинов. Затем контейнер Spring возвращает этот кэшированный объект всем запросам и ссылкам на bean-компоненты с этим определением bean-компонента:

    Если мы хотим показать приведенный выше пример с new() оператором для описания упрощенного представления о том, что контейнер Spring делает при запуске приложения, мы можем написать следующий код:


    Джава