spring中scope类型有哪些
-
在Spring中,Bean的作用域(scope)决定了Bean的生命周期和可见范围。Spring提供了以下几种Bean的作用域类型:
-
Singleton(单例):这是默认的作用域,每个Spring容器中只会创建一个Bean实例。无论通过多少次请求获取该Bean,都会返回同一个实例。
-
Prototype(原型):每次通过Spring容器获取Bean时,都会创建一个新的实例。每个请求获取的Bean实例都是独立的,不会被共享。
-
Request(请求):每个HTTP请求都会创建一个新的Bean实例。该Bean实例仅在当前请求的范围内有效,超出请求范围后将销毁。
-
Session(会话):每个HTTP会话都会创建一个新的Bean实例。该Bean实例仅在当前会话的范围内有效,超出会话范围后将销毁。
-
Global Session(全局会话):这个作用域仅在基于portlet的web应用中才有意义,它表示全局会话范围。在其他场景下,Global Session作用域等同于Session作用域。
此外,还有一些非标准的作用域类型:
-
Application(应用程序):在整个Web应用程序的生命周期中只会创建一个Bean实例。该Bean实例在所有的请求和会话中都是共享的。
-
WebSocket(Web套接字):在基于WebSocket的应用中,每个WebSocket连接会创建一个新的Bean实例。该Bean实例在特定WebSocket连接的范围内有效。
以上就是Spring中常用的Bean作用域类型,根据需要选择合适的作用域,以确保Bean的生命周期和可见范围的符合应用程序的需求。
1年前 -
-
在Spring框架中,可以使用不同的Scope类型来定义Bean的作用域。Spring框架提供了以下几种标准的Scope类型:
-
Singleton(单例模式):这是默认的Scope类型,它表示一个Bean在整个应用上下文中只会有一个实例。不管在应用中多少地方引用该Bean,都会返回同一个实例对象。
-
Prototype(原型模式):使用Prototype Scope类型定义的Bean会在每次请求时创建一个新的实例。每次从容器中获取该Bean时,都会返回一个新的实例对象。
-
Request(请求模式):使用Request Scope类型定义的Bean会在每次HTTP请求时创建一个新的实例。每次请求结束后,该Bean会被销毁。这个Scope类型适用于Web应用中的每个HTTP请求。
-
Session(会话模式):使用Session Scope类型定义的Bean会在每个用户会话(Session)中创建一个新的实例。每个用户的会话结束后,该Bean会被销毁。这个Scope类型适用于Web应用中的每个用户会话。
-
GlobalSession(全局会话模式):使用GlobalSession Scope类型定义的Bean会在整个应用的全局会话中创建一个实例。这个Scope类型只适用于基于Portlet的Web应用。
除了以上几种标准的Scope类型,Spring框架还支持一些其他的Scope类型,如:
-
WebSocket(Websocket模式):使用WebSocket Scope类型定义的Bean会在每个WebSocket连接中创建一个新的实例。每个连接结束后,该Bean会被销毁。
-
Custom(自定义模式):除了上述的标准Scope类型外,Spring框架还允许开发者根据自己的需求来定义自定义的Scope类型,通过实现Scope接口来自定义Scope类型。
开发者可以根据实际需求选择适合的Scope类型来定义Bean的作用域。在配置Bean时,可以使用@Scope注解或在XML配置文件中使用scope属性来指定Bean的Scope类型。
1年前 -
-
在Spring框架中,定义了如下几种Bean的作用域(scope):
-
Singleton(默认):以单例模式创建一个Bean实例,容器中只存在一个实例对象,所有的请求都会返回同一个实例。在整个应用程序中,所有使用该Bean的对象都共享同一个实例。可以通过设置
@Scope("singleton")或者@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)来指定。 -
Prototype:每次对该Bean进行请求时,都会创建一个新的实例。每个请求都会返回一个新的实例,所以每个实例都是独立的。在长时间运行的应用程序中,每次请求都会创建一个新的实例,可能会导致内存的浪费。可以通过设置
@Scope("prototype")或者@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)来指定。 -
Request:对于Web应用程序,每个HTTP请求都会创建一个新的实例。即每个请求会返回一个新的实例,不同的请求会有不同的实例。每个请求唯一对应一个实例,适用于Web应用程序中需要将Bean的作用域限制在同一个请求中的情况。可以通过设置
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)来指定。 -
Session:对于Web应用程序,每个用户会话(session)都会创建一个新的实例。即每个用户会话都会返回一个新的实例,不同的用户会话会有不同的实例。每个用户会话唯一对应一个实例,适用于需要将Bean的作用域限制在同一个用户会话中的情况。可以通过设置
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)来指定。 -
Application:对于Web应用程序,整个应用程序的生命周期中只会创建一个实例。即在整个应用程序中都共享同一个实例,不同的请求和用户会话都会共享该实例。适用于需要在整个应用程序中共享数据的情况。可以通过设置
@Scope(value = "application", proxyMode = ScopedProxyMode.TARGET_CLASS)来指定。 -
WebSocket:对于Web应用程序,每个WebSocket会话都会创建一个新的实例。即每个WebSocket会话都会返回一个新的实例,不同的WebSocket会话会有不同的实例。每个WebSocket会话唯一对应一个实例,适用于需要将Bean的作用域限制在同一个WebSocket会话中的情况。可以通过设置
@Scope(value = "websocket", proxyMode = ScopedProxyMode.TARGET_CLASS)来指定。
除了上述的作用域类型,还可以通过自定义作用域(scope)来实现更加灵活的Bean作用域控制。例如,可以自定义一个线程作用域(Thread Scope),让每个线程中的Bean请求返回对应的实例。
1年前 -