Какие области видимости бинов важны на практике и как их применять?
Продвинутые темы
Области видимости бинов (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.