Spring Bean Scopes

gca*_*ex5 54 java spring spring-mvc

有人可以解释一下Spring bean中的范围,我总是只使用'原型',但是我可以用其他参数代替吗?

我正在谈论的例子

<bean id="customerInfoController" class="com.action.Controller" scope="prototype">
    <property name="accountDao" ref="accountDao"/>
    <property name="utilityDao" ref="utilityDao"/>
    <property name="account_usageDao" ref="account_usageDao"/>  
</bean>
Run Code Online (Sandbox Code Playgroud)

Jun*_*san 85

spring规范中,支持五种类型的bean作用域:

单身人士(默认*)

根据Spring IoC容器将单个bean定义范围限定为单个对象实例.

原型

将单个bean定义范围限定为任意数量的对象实例.

3.请求

将单个bean定义范围限定为单个HTTP请求的生命周期; 也就是说,每个HTTP请求都有自己的bean实例,它是在单个bean定义的后面创建的.仅在Web感知Spring ApplicationContext的上下文中有效.

会议

将单个bean定义范围限定为HTTP会话的生命周期.仅在Web感知Spring ApplicationContext的上下文中有效.

5.全球会议

将单个bean定义范围限定为全局HTTP会话的生命周期.通常仅在portlet上下文中使用时有效.仅在Web感知Spring ApplicationContext的上下文中有效.

*default表示<bean />标记中未明确提供范围.在这里阅读更多关于它们的信息:http://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch04s04.html


Div*_*iya 26

在Spring中,bean作用域用于决定应该将哪个类型的bean实例从Spring容器返回给调用者.

支持5种类型的bean作用域:

  1. Singleton:它为每个Spring IoC容器返回一个bean实例.这个单实例存储在这样的单例bean的缓存中,并且该命名bean的所有后续请求和引用都返回缓存的对象.如果bean配置中没有指定bean范围文件,默认为singleton.

  2. 原型:每次请求时都返回一个新的bean实例.它不存储像singleton这样的任何缓存版本.

  3. 请求:它为每个HTTP请求返回一个bean实例.

  4. 会话:它为每个HTTP会话返回一个bean实例(用户级会话).

  5. GlobalSession:它为每个全局HTTP会话返回一个bean实例.它仅在Web感知的Spring ApplicationContext(应用程序级会话)的上下文中有效.

在大多数情况下,您可能只处理Spring的核心范围 - 单例原型,默认范围是单例.


hey*_*yjr 9

只想更新一下,就像Spring文档中提到的那样,在Spring 5中,Spring支持6个范围,其中只有4个范围只有在使用支持Web的ApplicationContext时才可用.

singleton(默认)将每个Spring IoC容器的单个bean定义范围限定为单个对象实例.

prototype 将单个bean定义范围限定为任意数量的对象实例.

request 将单个bean定义范围限定为单个HTTP请求的生命周期; 也就是说,每个HTTP请求都有自己的bean实例,它是在单个bean定义的后面创建的.仅在Web感知Spring ApplicationContext的上下文中有效.

session 将单个bean定义范围限定为HTTP会话的生命周期.仅在Web感知Spring ApplicationContext的上下文中有效.

application 将单个bean定义范围限定为ServletContext的生命周期.仅在Web感知Spring ApplicationContext的上下文中有效.

websocket 将单个bean定义范围限定为WebSocket的生命周期.仅在Web感知Spring ApplicationContext的上下文中有效.


Lau*_*ntG 5

Spring文档描述了以下标准范围:

singleton :(默认)将每个Spring IoC容器的单个bean定义范围限定为单个对象实例.

prototype:将单个bean定义范围限定为任意数量的对象实例.

request:将单个bean定义范围限定为单个HTTP请求的生命周期; 也就是说,每个HTTP请求都有自己的bean实例,它是在单个bean定义的后面创建的.仅在Web感知Spring ApplicationContext的上下文中有效.

session:将单个bean定义范围限定为HTTP会话的生命周期.仅在Web感知Spring ApplicationContext的上下文中有效.

全局会话:将单个bean定义范围限定为全局HTTP会话的生命周期.通常仅在portlet上下文中使用时有效.仅在Web感知Spring ApplicationContext的上下文中有效.

还可以使用a创建和配置其他自定义作用域CustomScopeConfigurer.一个例子是flowSpring Webflow添加的范围.

顺便说一句,你认为你总是使用prototype我觉得奇怪的东西.标准范围是singleton在我开发的应用程序中,我很少需要原型范围.你应该看看这个.


Vik*_*s V 5

可以在Spring bean范围中找到每个范围的详细说明.以下是摘要

Singleton - (默认)将每个Spring IoC容器的单个bean定义范围限定为单个对象实例.

prototype - 将单个bean定义范围限定为任意数量的对象实例.

request - 将单个bean定义范围限定为单个HTTP请求的生命周期; 也就是说,每个HTTP请求都有自己的bean实例,它是在单个bean定义的后面创建的.仅在Web感知Spring ApplicationContext的上下文中有效.

session - 将单个bean定义范围限定为HTTP会话的生命周期.仅在Web感知Spring ApplicationContext的上下文中有效.

全局会话 - 将单个bean定义范围限定为全局HTTP会话的生命周期.通常仅在portlet上下文中使用时有效.仅在Web感知Spring ApplicationContext的上下文中有效.