Лучшие практики использования Spring Bean Scopes

В Spring область действия компонента определяет жизненный цикл компонента. Область действия компонента определяет, сколько экземпляров компонента будет создано и как эти экземпляры будут совместно использоваться различными частями приложения.

Что такое область действия Spring bean?

Область действия Spring bean — это механизм, который управляет созданием экземпляра и жизненным циклом bean-компонента. Областью действия компонента может быть синглтон, прототип, запрос, сеанс, глобальный сеанс или веб-приложение.

Spring Framework предоставляет пять встроенных областей:

Область действия Singleton

Область Singleton — это область действия bean-компонента по умолчанию в Spring. Одноэлементный компонент создается только один раз для каждого контейнера Spring IoC. Это означает, что все ссылки на компонент будут возвращать один и тот же экземпляр.

Когда следует использовать одноэлементную область?

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

Пример: https://thedailytechdose.com/how-bean-scopes-work-in-spring-boot/

Область применения прототипа

Область прототипа не является областью действия одноэлементного компонента. Прототип bean-компонента создается заново каждый раз, когда его запрашивают. Это означает, что каждый раз, когда вы вызываете getBean() для прототипа bean-компонента, вы получаете новый экземпляр bean-компонента.

Когда следует использовать область действия прототипа?

Область прототипа следует использовать, когда вам не нужно совместно использовать компонент между разными частями приложения. Например, вы можете использовать область прототипа для bean-компонента, который используется для генерации случайных чисел, поскольку вам не нужно использовать один и тот же генератор случайных чисел в разных частях приложения.

Пример: https://thedailytechdose.com/how-bean-scopes-work-in-spring-boot/

Область запроса:

Компонент области запроса создается для каждого HTTP-запроса. Это означает, что каждый раз при получении нового HTTP-запроса создается новый экземпляр компонента. Эта область подходит для bean-компонентов, которые используются для обработки одного запроса, например формы входа или корзины покупок.

Область сеанса

Эта область действия также доступна только в веб-приложениях. Для каждого сеанса HTTP создается компонент сеансовой области действия. Это означает, что каждый раз, когда создается новый сеанс HTTP, создается новый экземпляр компонента. Эта область подходит для bean-компонентов, которые используются для поддержания состояния в нескольких запросах, таких как корзина покупок или предпочтения пользователя.

Глобальная область сеанса

Эта область также доступна только в веб-приложениях. Контейнер Spring создает новый экземпляр компонента для каждого глобального сеанса HTTP. Эта область аналогична области сеанса, но она используется для сеансов, которые используются несколькими веб-приложениями.

Вот несколько примеров использования различных областей действия bean-компонентов:

  • Компонент подключения к базе данных должен быть определен как одноэлементный компонент. Это означает, что во всем приложении будет создан только один экземпляр компонента подключения к базе данных. Это важно, поскольку соединение с базой данных является ресурсом с отслеживанием состояния. Если бы у нас было несколько экземпляров компонента подключения к базе данных, каждый экземпляр имел бы свое собственное соединение с базой данных. Это может привести к таким проблемам, как состояния гонки и взаимоблокировки.
  • Компонент генератора случайных чисел должен быть определен как прототип компонента. Это означает, что для каждого запроса будет создаваться новый экземпляр компонента генератора случайных чисел. Это связано с тем, что генератор случайных чисел является ресурсом без сохранения состояния. Нет необходимости разделять состояние генератора случайных чисел между запросами.
  • Компонент формы входа должен быть определен как компонент запроса. Это означает, что для каждого HTTP-запроса будет создаваться новый экземпляр bean-компонента формы входа.
  • Компонент «Корзина покупок» должен быть определен как сеансовый компонент. Это означает, что для каждого HTTP-сеанса будет создаваться новый экземпляр компонента корзины покупок. Это связано с тем, что корзина покупок является ресурсом с состоянием. Его необходимо поддерживать для нескольких запросов для одного и того же пользователя.
  • Компонент пользовательских настроек должен быть определен как глобальный сеансовый компонент. Это означает, что для каждого глобального HTTP-сеанса будет создаваться новый экземпляр компонента пользовательских настроек. Это похоже на область сеанса, но используется для сеансов, которые используются несколькими веб-приложениями.

Вот некоторые преимущества использования области действия bean-компонента Spring:

  • Это может помочь повысить производительность за счет уменьшения количества объектов, которые необходимо создавать и управлять ими.
  • Это может помочь улучшить масштабируемость, позволяя одновременно создавать и использовать несколько экземпляров одного и того же компонента.
  • Это может помочь улучшить ремонтопригодность, упрощая отслеживание и управление состоянием компонентов.

Полный ресурс по низкоуровневому дизайну для интервью: https://kishorek2.gumroad.com/l/wbpdi

Для реализации вышеуказанных областей bean-компонентов, пожалуйста, отметьте Здесь

Как индийский писатель, монетизация публикуемого мной контента недоступна.Если вам нравится контент и вы хотите поддержать меня больше, вы можете купить мне кофе здесь: https:// bmc.link/kishorek2511или https://www.patreon.com/Kishore834 или https://ko-fi.com/kishorek2511