Ответ
Нет, не все. Хотя scope по умолчанию в Spring — singleton, для определенных сценариев использовались другие scopes.
1. Singleton (по умолчанию):
- Применялся для: Stateless сервисов, репозиториев, утилитарных классов. Это безопасно и эффективно.
@Service // По умолчанию scope="singleton" public class PaymentService { // Не содержит изменяемого состояния public Receipt process(PaymentRequest request) { ... } }
2. Prototype:
- Применялся для: Бинов, которые хранят состояние в рамках одного запроса/операции и не должны использоваться повторно.
@Component @Scope("prototype") // Новый бин при каждом внедрении (getBean() или инъекции) public class RequestContext { private final UUID requestId = UUID.randomUUID(); // Состояние, уникальное для каждого запроса }
3. Request/Application/WebSocket Scope:
@RequestScope: Для хранения данных, актуальных только в рамках одного HTTP-запроса (например, аутентифицированный пользователь).@ApplicationScope: Для кэширования данных, общих для всего приложения, но с возможностью пересоздания.
Архитектурное решение: Основная кодовая база (95%) состояла из stateless синглтонов для производительности. Scopes prototype и request применялись точечно для изоляции состояния, что предотвращало скрытые баги в многопоточной среде.