spring中scope类型有哪些

fiy 其他 144

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    在Spring中,Bean的作用域(scope)决定了Bean的生命周期和可见范围。Spring提供了以下几种Bean的作用域类型:

    1. Singleton(单例):这是默认的作用域,每个Spring容器中只会创建一个Bean实例。无论通过多少次请求获取该Bean,都会返回同一个实例。

    2. Prototype(原型):每次通过Spring容器获取Bean时,都会创建一个新的实例。每个请求获取的Bean实例都是独立的,不会被共享。

    3. Request(请求):每个HTTP请求都会创建一个新的Bean实例。该Bean实例仅在当前请求的范围内有效,超出请求范围后将销毁。

    4. Session(会话):每个HTTP会话都会创建一个新的Bean实例。该Bean实例仅在当前会话的范围内有效,超出会话范围后将销毁。

    5. Global Session(全局会话):这个作用域仅在基于portlet的web应用中才有意义,它表示全局会话范围。在其他场景下,Global Session作用域等同于Session作用域。

    此外,还有一些非标准的作用域类型:

    1. Application(应用程序):在整个Web应用程序的生命周期中只会创建一个Bean实例。该Bean实例在所有的请求和会话中都是共享的。

    2. WebSocket(Web套接字):在基于WebSocket的应用中,每个WebSocket连接会创建一个新的Bean实例。该Bean实例在特定WebSocket连接的范围内有效。

    以上就是Spring中常用的Bean作用域类型,根据需要选择合适的作用域,以确保Bean的生命周期和可见范围的符合应用程序的需求。

    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    在Spring框架中,可以使用不同的Scope类型来定义Bean的作用域。Spring框架提供了以下几种标准的Scope类型:

    1. Singleton(单例模式):这是默认的Scope类型,它表示一个Bean在整个应用上下文中只会有一个实例。不管在应用中多少地方引用该Bean,都会返回同一个实例对象。

    2. Prototype(原型模式):使用Prototype Scope类型定义的Bean会在每次请求时创建一个新的实例。每次从容器中获取该Bean时,都会返回一个新的实例对象。

    3. Request(请求模式):使用Request Scope类型定义的Bean会在每次HTTP请求时创建一个新的实例。每次请求结束后,该Bean会被销毁。这个Scope类型适用于Web应用中的每个HTTP请求。

    4. Session(会话模式):使用Session Scope类型定义的Bean会在每个用户会话(Session)中创建一个新的实例。每个用户的会话结束后,该Bean会被销毁。这个Scope类型适用于Web应用中的每个用户会话。

    5. GlobalSession(全局会话模式):使用GlobalSession Scope类型定义的Bean会在整个应用的全局会话中创建一个实例。这个Scope类型只适用于基于Portlet的Web应用。

    除了以上几种标准的Scope类型,Spring框架还支持一些其他的Scope类型,如:

    1. WebSocket(Websocket模式):使用WebSocket Scope类型定义的Bean会在每个WebSocket连接中创建一个新的实例。每个连接结束后,该Bean会被销毁。

    2. Custom(自定义模式):除了上述的标准Scope类型外,Spring框架还允许开发者根据自己的需求来定义自定义的Scope类型,通过实现Scope接口来自定义Scope类型。

    开发者可以根据实际需求选择适合的Scope类型来定义Bean的作用域。在配置Bean时,可以使用@Scope注解或在XML配置文件中使用scope属性来指定Bean的Scope类型。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    在Spring框架中,定义了如下几种Bean的作用域(scope):

    1. Singleton(默认):以单例模式创建一个Bean实例,容器中只存在一个实例对象,所有的请求都会返回同一个实例。在整个应用程序中,所有使用该Bean的对象都共享同一个实例。可以通过设置@Scope("singleton")或者@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)来指定。

    2. Prototype:每次对该Bean进行请求时,都会创建一个新的实例。每个请求都会返回一个新的实例,所以每个实例都是独立的。在长时间运行的应用程序中,每次请求都会创建一个新的实例,可能会导致内存的浪费。可以通过设置@Scope("prototype")或者@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)来指定。

    3. Request:对于Web应用程序,每个HTTP请求都会创建一个新的实例。即每个请求会返回一个新的实例,不同的请求会有不同的实例。每个请求唯一对应一个实例,适用于Web应用程序中需要将Bean的作用域限制在同一个请求中的情况。可以通过设置@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)来指定。

    4. Session:对于Web应用程序,每个用户会话(session)都会创建一个新的实例。即每个用户会话都会返回一个新的实例,不同的用户会话会有不同的实例。每个用户会话唯一对应一个实例,适用于需要将Bean的作用域限制在同一个用户会话中的情况。可以通过设置@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)来指定。

    5. Application:对于Web应用程序,整个应用程序的生命周期中只会创建一个实例。即在整个应用程序中都共享同一个实例,不同的请求和用户会话都会共享该实例。适用于需要在整个应用程序中共享数据的情况。可以通过设置@Scope(value = "application", proxyMode = ScopedProxyMode.TARGET_CLASS)来指定。

    6. WebSocket:对于Web应用程序,每个WebSocket会话都会创建一个新的实例。即每个WebSocket会话都会返回一个新的实例,不同的WebSocket会话会有不同的实例。每个WebSocket会话唯一对应一个实例,适用于需要将Bean的作用域限制在同一个WebSocket会话中的情况。可以通过设置@Scope(value = "websocket", proxyMode = ScopedProxyMode.TARGET_CLASS)来指定。

    除了上述的作用域类型,还可以通过自定义作用域(scope)来实现更加灵活的Bean作用域控制。例如,可以自定义一个线程作用域(Thread Scope),让每个线程中的Bean请求返回对应的实例。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部