Есть ли сфера применения весной?
Я видел область применения в следующем блоге. Это правда?
Поскольку, согласно моему серфингу, я узнал, что у весны есть только ниже 5 областей. Пожалуйста, поправьте меня, если я ошибаюсь.
- одиночка
- Прототип
- Запрос
- сессия
- Глобальная сессия
2 ответа
На официальном документе есть раздел, который связан с областями применения бобов:
В основном они определяют следующее:
singleton (по умолчанию) Обрабатывает одно определение компонента в одном экземпляре объекта для контейнера Spring IoC.
Прототип Обрабатывает одно определение компонента для любого количества экземпляров объекта.
request Обрабатывает одно определение компонента для жизненного цикла одного HTTP-запроса; то есть каждый HTTP-запрос имеет свой собственный экземпляр компонента, созданного на основе определения одного компонента. Действителен только в контексте веб-приложения Spring ApplicationContext.
сеанс Обрабатывает определение одного компонента для жизненного цикла сеанса HTTP. Действителен только в контексте веб-приложения Spring ApplicationContext.
globalSession Обрабатывает определение единственного компонента для жизненного цикла глобальной HTTP-сессии. Обычно действует только при использовании в контексте портлета. Действителен только в контексте веб-приложения Spring ApplicationContext.
application Области применения определяют одно определение bean-компонента для жизненного цикла ServletContext. Действителен только в контексте веб-приложения Spring ApplicationContext.
websocket Обрабатывает одно определение bean-компонента для жизненного цикла WebSocket. Действителен только в контексте веб-приложения Spring ApplicationContext.
Более того, поскольку в Spring 3.0 существует другая область потока области действия, но она не зарегистрирована по умолчанию, более того, вы даже можете создать свою собственную область:
Начиная с Spring 3.0 область потока доступна, но по умолчанию она не зарегистрирована. Для получения дополнительной информации см. Документацию для SimpleThreadScope. Инструкции по регистрации этой или любой другой настраиваемой области см. В разделе "Использование настраиваемой области".
Есть раздел, который объясняет, как определить вашу пользовательскую область:
Уважение к Application scope
, они определяют это следующим образом:
Контейнер Spring создает новый экземпляр компонента AppPreferences, используя определение компонента appPreferences один раз для всего веб-приложения. Таким образом, bean-компонент appPreferences находится на уровне ServletContext и хранится как обычный атрибут ServletContext.
Это также объясняет разницу между синглтоном Spring:
Это в некоторой степени похоже на одноэлементный компонент Spring, но отличается двумя важными способами: это один компонент для ServletContext, а не для Spring 'ApplicationContext' (для которого может быть несколько в любом данном веб-приложении), и он фактически отображается и поэтому видимый как атрибут ServletContext
Итак, если вы хотите использовать XML:
<bean id="apps" class="com.App" scope="application"/>
Или аннотация:
@ApplicationScope
@Component
public class App {
// ...
}
application Области применения определяют одно определение bean-компонента для жизненного цикла ServletContext. Действителен только в контексте веб-приложения Spring ApplicationContext.
Для получения более подробной информации перейдите по ссылке: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/