Легко узнать сторону восточного ветра, и это всегда весна, когда она красочна.
Обзор
существуетSpring
framework, мы можем использовать шесть встроенныхspring bean
создан в рамкахbean
, вы также можете определитьbean
Объем. Из этих шести диапазонов только при использовании поддержкиWeb
изapplicationContext
, четыре из них доступны.singleton
а такжеprototype
Прицелы могут использоваться для любого типаioc
контейнер.
Типы областей действия Spring Bean
существуетSpring
, ты можешь использоватьspring
середина@Scope
Определение аннотацииbean
объем . Ниже мы перечислили эти шесть вSpring
Встроенный используется в контексте приложенияbean
объем. Эти же области применимы и кspring boot
bean
объем.
SCOPE | описывать |
---|---|
singleton |
spring IoC Контейнер существуетbean экземпляр объекта. |
prototype |
В отличие от синглтона, каждый запросbean , он создает новый экземпляр. |
request |
существуетHTTP просить(Request ), создается и используется один экземпляр. относятся только кweb Окружающая обстановкаSpring ApplicationContext эффективен в. |
session |
существуетHTTP сеанс (Session ), создается и используется один экземпляр. относятся только кweb Окружающая обстановкаSpring ApplicationContext эффективен в. |
application |
будетServletContext Один экземпляр создается и используется в течение всего жизненного цикла. относятся только кweb Окружающая обстановкаSpring ApplicationContext эффективен в. |
websocket |
В течение всего жизненного цикла WebSocket будет создан и использован один экземпляр. относятся только кweb Окружающая обстановкаSpring ApplicationContext эффективен в. |
одноэлементная область
singleton
даspring
Область по умолчанию для bean-компонентов в контейнере. Он говорит контейнеру создавать и управлять только однимbean
экземпляр класса. Единственный экземпляр хранится в таком синглтонеbean
в кэше, а названныйbean
Все последующие запросы и ссылки возвращают экземпляр этого кеша.
использоватьJava
Настроенная одноэлементная областьbean
Пример:
@Component
@Scope("singleton") //可以省略,默认即是singleton
public class BeanClass {
}
использоватьXML
Настроенная одноэлементная областьbean
Пример:
<!-- 后面的singleton可以省略 -->
<bean id="beanId" class="cn.howtodoinjava.BeanClass" scope="singleton" />
//or
<bean id="beanId" class="cn.howtodoinjava.BeanClass" />
объем прототипа
Каждая пара приложенийBean
Когда запрос сделан, область прототипа создает новыйBean
пример.
Вы должны знать, что уничтожитьbean
Методы жизненного цикла не вызывают область действия прототипаbean
, который вызывает только метод обратного вызова инициализации. Итак, как разработчик, вы несете ответственность за очистку области видимости прототипа.bean
Экземпляр и все ресурсы, содержащиеся в нем.
прототипbean
спектрJava
Пример конфигурации:
@Component
@Scope("prototype")
public class BeanClass {
}
прототипbean
спектрXML
Пример конфигурации:
<bean id="beanId" class="cn.howtodoinjava.BeanClass" scope="prototype" />
В общем, у вас должно быть состояние для всех
bean
Используйте область прототипа, которая не имеет состоянияbean
Используйте одноэлементную область.
для использования в запросах, сессиях, приложениях и
websocket
использовать в рамкахbean
, вам необходимо зарегистрироватьсяRequestContextListener
илиRequestContextFilter
.
область запроса
В области запроса контейнер для каждогоHTTP
Запрос на создание нового экземпляра. Таким образом, если сервер в настоящее время обрабатывает 50 запросов, в контейнере может быть до 50 запросов.bean
Отдельный экземпляр класса. Любые изменения состояния одного экземпляра невидимы для других экземпляров. Эти экземпляры уничтожаются после завершения запроса.
request
проситьbean
спектрJava
Пример конфигурации:
@Component
@Scope("request")
public class BeanClass {
}
//or
@Component
@RequestScope
public class BeanClass {
}
request
проситьbean
спектрXML
Пример конфигурации:
<bean id="beanId" class="cn.howtodoinjava.BeanClass" scope="request" />
область сеанса
В области сеанса контейнер предназначен для каждогоHTTP
Сессия создает новый экземпляр. Таким образом, если на сервере 20 активных сеансов, в контейнере может быть до 20 сеансов.bean
Отдельный экземпляр класса. Все в течение жизни одного сеансаHTTP
запросы могут обращаться к одному и тому жеbean
пример.
В области сеанса любые изменения состояния одного экземпляра невидимы для других экземпляров. Эти экземпляры уничтожаются после уничтожения/завершения сеанса на сервере.
session
проситьbean
спектрJava
Пример конфигурации:
@Component
@Scope("session")
public class BeanClass {
}
//or
@Component
@SessionScope
public class BeanClass {
}
session
проситьbean
спектрXML
Пример конфигурации:
<bean id="beanId" class="cn.howtodoinjava.BeanClass" scope="session" />
область применения
В масштабе приложения контейнер предназначен для каждогоweb
Экземпляр создается при запуске приложения. Он почти аналогичен одноэлементному прицелу с двумя отличиями. который:
- область применения
bean
каждыйServletContext
Одноэлементный объект, в то время как одноэлементная областьbean
каждыйApplicationContext
одноэлементный объект. Обратите внимание, что одно приложение может иметь несколько контекстов приложений. - область применения
bean
в видеServletContext
свойства видны.
application
bean
спектрJava
Пример конфигурации:
@Component
@Scope("application")
public class BeanClass {
}
//or
@Component
@ApplicationScope
public class BeanClass {
}
application
bean
спектрXML
Пример конфигурации:
<bean id="beanId" class="com.howtodoinjava.BeanClass" scope="application" />
область действия веб-сокета
WebSocket
Протокол поддерживает двунаправленную связь между клиентом и удаленным хостом, при этом удаленный хост выбирает связь с клиентом.WebSocket
В протоколе предусмотрено отдельноеTCP
соединять. Это особенно полезно для многопользовательских приложений с одновременным редактированием и многопользовательской игрой.
в этом типеWeb
заявление,HTTP
Используется только для первоначального рукопожатия. Если сервер согласен, сервер можетHTTP
Ответ со статусом 101 (протокол обмена). Если рукопожатие прошло успешно, тоTCP
Сокет остается открытым, и клиент и сервер могут использовать сокет для отправки сообщений друг другу.
websocket
bean
спектрJava
Пример конфигурации:
@Component
@Scope("websocket")
public class BeanClass {
}
websocket
bean
спектрXML
Пример конфигурации:
<bean id="beanId" class="com.howtodoinjava.BeanClass" scope="websocket" />
Пожалуйста, обрати внимание,websocket
в диапазонеbean
обычно является синглтоном и более эффективен, чем любой синглтонWebSocket
Срок действия сеанса дольше.
настраиваемый объем потока
Spring
также используйте классSimpleThreadScope
Предоставляется нестандартная область потока. Чтобы использовать эту область, вы должны использоватьCustomScopeConfigurer
Класс регистрирует его в контейнере.
<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
<property name="scopes">
<map>
<entry key="thread">
<bean class="org.springframework.context.support.SimpleThreadScope"/>
</entry>
</map>
</property>
</bean>
правильноbean
Каждый запрос возвращает один и тот же экземпляр в одном и том же потоке.
нитьbean
спектрJava
Пример конфигурации:
@Component
@Scope("thread")
public class BeanClass {
}
нитьbean
спектрxml
Пример конфигурации:
<bean id="beanId" class="cn.howtodoinjava.BeanClass" scope="thread" />
Суммировать
Spring framework
обеспечивает шестьSpring
bean
Области действия, экземпляры в каждой области действия имеют разный срок службы. Как разработчики, мы должны разумно выбирать любое управление контейнерами.bean
спектр. Аналогично, когда разные области видимостиbean
Мы должны принимать обоснованные решения, когда ссылаемся друг на друга.
Пожалуйста, запомните всю информацию, приведенную выше, чтобы ответить на любойspring
bean
Вопросы для интервью по объему.
Оригинальная ссылка:Весна 5 — прицелы Bean