PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Какие области видимости бинов важны на практике и как их применять?

Продвинутые темы

Области видимости бинов (scopes) — понятие из DI-контейнеров (Spring, Angular, NestJS): singleton (один экземпляр), prototype/transient (новый на каждый запрос), request, session. Определяют время жизни зависимости.

Основные scopes

Singleton (по умолчанию)

Один экземпляр на весь контейнер/приложение — все получают его же:

Один UserService на приложение
  • Когда: без состояния, общие сервисы (логгер, конфиг, репозиторий).

Prototype / Transient

Новый экземпляр при каждом запросе зависимости:

Каждый инжект → новый экземпляр
  • Когда: объекты с состоянием, которые не должны разделяться.

Request scope

Один экземпляр на HTTP-запрос (серверные фреймворки):

  • Когда: данные, специфичные для запроса (контекст пользователя запроса).

Session scope

Один экземпляр на пользовательскую сессию.

В разных фреймворках

  • Spring (Java): singleton, prototype, request, session.
  • NestJS: DEFAULT (singleton), REQUEST, TRANSIENT.
  • Angular: провайдеры на уровне root (singleton), модуля, компонента.
// NestJS
@Injectable({ scope: Scope.REQUEST })
export class RequestService {}

Зачем нужны

Управляют временем жизни и разделением зависимостей: одни общие (singleton), другие изолированные (transient/request).

Как выбирать

  • Общий stateless-сервис → singleton (эффективно).
  • Состояние на запрос → request.
  • Уникальный экземпляр каждому → transient/prototype.

Коротко для собеседования

Scopes бинов в DI: singleton (один экземпляр на приложение — stateless-сервисы, по умолчанию), prototype/transient (новый на каждый инжект — объекты с состоянием), request (на HTTP-запрос — контекст запроса), session (на сессию). Управляют временем жизни и разделением зависимостей. В NestJS — DEFAULT/REQUEST/TRANSIENT, в Angular — root/module/component.

Другие вопросы раздела