Какие скопы бинов есть в Spring? Чем Singleton отличается от Prototype?
Ответ от нейросети
sobes.tech AI
В Spring Framework существуют несколько скоупов (областей видимости) бинов, основные из них:
-
Singleton — один экземпляр бина на весь контейнер Spring. Создаётся при старте приложения (или при первом обращении, если ленивый режим). Все запросы получают один и тот же объект.
-
Prototype — новый экземпляр создаётся каждый раз при запросе бина из контейнера.
-
Request — бин живёт в рамках одного HTTP-запроса (для веб-приложений).
-
Session — бин живёт в рамках HTTP-сессии.
-
Application — бин живёт в рамках ServletContext.
-
Websocket — бин живёт в рамках WebSocket-сессии.
Отличия Singleton от Prototype:
-
Singleton гарантирует единственный экземпляр на весь контейнер, что экономит ресурсы и удобно для сервисов с состоянием, общим для всех.
-
Prototype создаёт новый объект при каждом запросе, что полезно для бинов с состоянием, специфичным для конкретного использования.
Пример:
@Component
@Scope("prototype")
public class MyPrototypeBean {
// каждый вызов getBean создаст новый объект
}
@Component
@Scope("singleton")
public class MySingletonBean {
// один объект на весь контейнер
}
Важно помнить, что Spring не управляет жизненным циклом prototype-бинов после их создания, ответственность за очистку лежит на вызывающем.