Назад к вопросам
Middle
68
questionbank

Какие области видимости (scope) в Spring вы знаете?

Sobes Copilot

Получайте ответы в реальном времени

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

sobes.tech AI

Spring поддерживает несколько областей видимости для бинов:

  • singleton: Объединяет один экземпляр определения бина на каждый контейнер Spring. Это область видимости по умолчанию.
  • prototype: Создает новый экземпляр бина каждый раз, когда он запрашивается.
  • request: Объединяет один экземпляр определения бина в течение жизненного цикла одного HTTP-запроса. Применяется только в контексте веб-приложения.
  • session: Объединяет один экземпляр определения бина в течение жизненного цикла одной HTTP-сессии. Применяется только в контексте веб-приложения.
  • application: Объединяет один экземпляр определения бина в течение жизненного цикла ServletContext. Применяется только в контексте веб-приложения.
  • websocket: Объединяет один экземпляр определения бина в течение жизненного цикла подключения WebSocket. Применяется только в контексте веб-приложения.

Для объявления области видимости можно использовать аннотацию @Scope:

@Component
@Scope("prototype")
public class MyPrototypeBean {
    // ...
}

Или в XML-конфигурации:

<!--?xml version="1.0" encoding="UTF-8"?-->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="mySingletonBean" class="com.example.MySingletonBean" scope="singleton"/>
    <bean id="myPrototypeBean" class="com.example.MyPrototypeBean" scope="prototype"/>

</beans>

Важно отметить, что области видимости request, session, application и websocket доступны только при использовании WebApplicationContext.