Sobes.tech
Назад к вопросам
Senior
4

Какие скопы бинов есть в Spring? Чем Singleton отличается от Prototype?

Компании, где спрашивали
SSP Soft

Ответ от нейросети

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-бинов после их создания, ответственность за очистку лежит на вызывающем.