spring支持的scope有哪些

worktile 其他 69

回复

共3条回复 我来回复
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    Spring支持的scope主要有以下几种:

    1. singleton:单例模式,即每个Spring容器中只有一个实例,所有请求都共享同一个实例。这是Spring默认的scope。
    2. prototype:原型模式,每次请求都创建一个新的实例。每个实例都是独立的,不共享状态。
    3. request:在Web应用中,每次HTTP请求都会创建一个新的实例。该实例只在当前请求过程中有效,每个请求都有自己独立的实例。
    4. session:在Web应用中,每个HTTP会话都会创建一个新的实例。该实例在整个会话期间保持有效,即在同一个会话中的多个请求共享同一个实例。
    5. global-session:在基于portlet的Web应用中,每个portlet所属的同一个会话中的多个请求共享同一个实例。
    6. application:在Web应用中,每个ServletContext中都会有一个实例。该实例在整个应用的生命周期中保持有效,所有请求共享同一个实例。

    这些不同的scope可以根据应用的需求来选择。一般来说,如果需要多个对象共享同一个状态,可以选择singleton scope;如果需要每次请求都有一个新的对象,可以选择prototype scope;如果需要在Web应用中共享对象,可以选择request、session、global-session或application scope,具体根据会话和请求的作用域来选择。

    1年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Spring框架提供了几种不同的作用域(scope),用于定义Bean的生命周期和作用范围。下面是Spring框架支持的不同作用域:

    1. Singleton(单例):这是Spring框架默认的作用域。在整个应用程序中,只会创建一个Bean实例,并在容器的整个生命周期中都可访问。无论何时请求该Bean,都会返回同一个实例。

    2. Prototype(原型):每次请求单独创建一个新的Bean实例。每个实例都有自己的属性,状态和依赖项。这意味着每次从容器获取该Bean时,都会创建一个新的实例。

    3. Request(请求):每个HTTP请求都会创建一个新的Bean实例。这个作用域在Web应用程序中很有用,确保在每个请求期间,每个用户都有自己的Bean实例。

    4. Session(会话):每个HTTP会话都会创建一个新的Bean实例。对于Web应用程序,Bean的作用范围限于用户的会话。因此,同一用户的所有请求会共享同一个实例,并且在同一会话期间保持状态。

    5. Global Session(全局会话):类似于Session作用域,但是只在基于portlet的web应用程序中起作用。在这种作用域下,Bean的生命周期是整个web应用程序中的全局会话期间。

    除了上述作用域外,Spring还提供了一些特殊的作用域,如:

    1. Application(应用程序):在整个Web应用程序的生命周期中,只有一个Bean实例被创建。这个作用域主要用于非Web应用程序中,确保在应用程序的整个生命周期内能够共享Bean。

    2. WebSocket(WebSocket):这是一个基于WebSocket会话的作用域,适用于使用WebSocket进行通信的应用程序。

    对于每个作用域,Spring容器负责创建和管理Bean的实例。开发人员可以根据应用程序的需求选择合适的作用域来管理Bean的生命周期和作用范围。

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

    Spring支持的scope有以下几种:

    1. singleton:默认的scope,每个Spring容器中只会创建一个bean实例。无论何时请求该bean,都会返回同一个实例。

    2. prototype:每次请求都会创建一个新的bean实例。每个请求都会返回不同的实例。

    3. request:每个HTTP请求都会创建一个新的bean实例,该实例仅在当前请求的作用域内有效。Spring会自动管理和销毁这些实例。

    4. session:每个HTTP session都会创建一个新的bean实例,该实例仅在当前session的作用域内有效。Spring会自动管理和销毁这些实例。

    5. application:每个Web应用程序上下文都会创建一个新的bean实例,该实例在整个应用程序的生命周期内有效。Spring会自动管理和销毁这些实例。

    6. websocket:每个Websocket会话都会创建一个新的bean实例,该实例在Websocket会话的生命周期内有效。Spring会自动管理和销毁这些实例。

    7. custom:自定义的作用域。可以通过实现org.springframework.beans.factory.config.Scope接口来定义自己的作用域。

    下面我们将详细介绍每种scope的使用方法和操作流程。

    singleton scope

    singleton是Spring bean的默认scope。每个容器中只会创建一个bean实例。

    使用方法:
    在bean的定义中不需要显式地指定scope,Spring会自动使用singleton scope。例如:

    @Component
    public class MySingletonBean {
        // 实现bean的逻辑
    }
    

    操作流程:

    1. 启动Spring容器时,会创建一个单例bean实例。
    2. 当需要该bean时,Spring会从容器中返回这个唯一的实例。
    3. 如果bean有依赖关系,Spring会为依赖属性注入相应的实例。
    4. 当应用程序关闭时,Spring会销毁这个实例。

    prototype scope

    prototype scope表示每次请求都会创建一个新的bean实例。

    使用方法:
    在bean的定义中显式地指定scope为prototype。例如:

    @Component
    @Scope("prototype")
    public class MyPrototypeBean {
        // 实现bean的逻辑
    }
    

    也可以使用@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)来指定scope。

    操作流程:

    1. 当需要该bean时,Spring会创建一个新的实例。
    2. 如果bean有依赖关系,Spring会为依赖属性注入相应的实例。
    3. 当请求结束后,Spring不会自动销毁这个实例。需要手动销毁。

    request scope

    request scope表示每个HTTP请求都会创建一个新的bean实例,该实例仅在当前请求的作用域内有效。

    使用方法:
    在bean的定义中显式地指定scope为request。例如:

    @Component
    @Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
    public class MyRequestBean {
        // 实现bean的逻辑
    }
    

    操作流程:

    1. 当有HTTP请求时,Spring会创建一个新的实例,并将其绑定到当前请求。
    2. 如果bean有依赖关系,Spring会为依赖属性注入相应的实例。
    3. 当请求结束后,Spring会自动销毁这个实例。

    session scope

    session scope表示每个HTTP会话都会创建一个新的bean实例,该实例在当前session的作用域内有效。

    使用方法:
    在bean的定义中显式地指定scope为session。例如:

    @Component
    @Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
    public class MySessionBean {
        // 实现bean的逻辑
    }
    

    操作流程:

    1. 当有新的HTTP会话时,Spring会创建一个新的实例,并将其绑定到当前会话。
    2. 如果bean有依赖关系,Spring会为依赖属性注入相应的实例。
    3. 当会话结束后,Spring会自动销毁这个实例。

    application scope

    application scope表示每个Web应用程序上下文都会创建一个新的bean实例,该实例在整个应用程序的生命周期内有效。

    使用方法:
    在bean的定义中显式地指定scope为application。例如:

    @Component
    @Scope(value = WebApplicationContext.SCOPE_APPLICATION, proxyMode = ScopedProxyMode.TARGET_CLASS)
    public class MyApplicationBean {
        // 实现bean的逻辑
    }
    

    操作流程:

    1. 当启动Web应用程序时,Spring会创建一个新的实例,并将其绑定到应用程序上下文。
    2. 如果bean有依赖关系,Spring会为依赖属性注入相应的实例。
    3. 当应用程序关闭时,Spring会自动销毁这个实例。

    websocket scope

    websocket scope表示每个Websocket会话都会创建一个新的bean实例,该实例在Websocket会话的生命周期内有效。

    使用方法:
    在bean的定义中显式地指定scope为websocket。例如:

    @Component
    @Scope(value = WebApplicationContext.SCOPE_WEBSOCKET, proxyMode = ScopedProxyMode.TARGET_CLASS)
    public class MyWebSocketBean {
        // 实现bean的逻辑
    }
    

    操作流程:

    1. 当有新的Websocket会话时,Spring会创建一个新的实例,并将其绑定到当前会话。
    2. 如果bean有依赖关系,Spring会为依赖属性注入相应的实例。
    3. 当会话结束后,Spring会自动销毁这个实例。

    custom scope

    custom scope表示自定义的作用域。可以通过实现org.springframework.beans.factory.config.Scope接口来定义自己的作用域。自定义作用域通常用于特殊需求。

    使用方法:

    1. 创建一个实现了org.springframework.beans.factory.config.Scope接口的类。
    2. 实现接口中的方法,包括getremoveregisterDestructionCallback等方法。
    3. 在配置文件或注解中将scope指定为自定义的作用域。

    操作流程:

    1. 当需要该bean时,Spring会调用自定义作用域的get方法获取bean实例。
    2. 如果bean有依赖关系,Spring会为依赖属性注入相应的实例。
    3. 根据自定义作用域的配置,决定何时销毁这个实例。

    以上是Spring支持的scope以及使用方法和操作流程的介绍。根据具体的需求选择适合的scope来管理bean的生命周期和作用域。

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

400-800-1024

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

分享本页
返回顶部