spring bean的作用域有哪些

回复

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

    Spring Bean 的作用域有以下几种:

    1. Singleton(默认):这是最常见的作用域,默认情况下 Spring 容器中的 Bean 都是 Singleton 作用域的。也就是说,无论我们在整个应用程序中使用多少次该 Bean,Spring 都只会创建一个实例,并返回给我们使用。

    2. Prototype:每次通过 Spring 容器获取该 Bean 的时候,都会创建一个新的实例并返回。也就是说,每次获取该 Bean 的时候,Spring 都会使用 bean 的定义创建一个新的对象。

    3. Request:每次发起 HTTP 请求时,Spring 都会创建一个新的实例并绑定到该 HTTP 请求中。在同一次请求的处理过程中,多次获取该 Bean 实例都是同一个。

    4. Session:每个 HTTP Session 都会创建一个新的实例并绑定到该 Session。在同一个 Session 中,多次获取该 Bean 实例都是同一个。

    5. Global Session(仅在基于 Portlet 的 Web 应用中可用):这个作用域的 Bean 实例是针对 Portlet 应用的,每个 Portlet 应用都会创建一个全局的会话(Global Session)。在同一个全局会话中,多次获取该 Bean 实例都是同一个。

    以上就是 Spring Bean 的作用域介绍。通过设置不同的作用域,我们可以灵活地控制 Bean 实例的创建和使用方式,从而满足我们在不同场景下对 Bean 的管理需求。

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

    Spring框架中,bean的作用域是指在容器中创建的bean实例的生命周期和可见性范围。Spring框架提供了多种不同的作用域来满足不同的需求。以下是Spring框架中常用的bean作用域:

    1. Singleton(默认作用域):

      • 在整个应用程序中只创建一个bean实例。
      • Spring容器中的所有bean都可以访问同一个实例。
    2. Prototype:

      • 在每次请求时都创建一个新的bean实例。
      • 每次访问该bean时,Spring容器都会创建一个新的实例。
    3. Request:

      • 在每个HTTP请求的生命周期中创建一个新的bean实例。
      • 每个请求都会有自己的实例,不同请求之间的实例不共享。
    4. Session:

      • 在每个HTTP会话的生命周期中创建一个新的bean实例。
      • 每个用户会话都会有自己的实例,不同用户之间的实例不共享。
    5. Global Session:

      • 在portlet环境下,为每个全局会话创建一个新的bean实例。
      • 只在使用portlet进行开发时才有意义,普通的web应用程序中该作用域与Session作用域相同。

    除了上述常用的作用域之外,Spring框架还提供了其他一些特殊的作用域,如:

    • Application:在整个Web应用程序的生命周期中,创建一个bean实例。
    • WebSocket:在每个WebSocket连接的生命周期中创建一个bean实例。
    • Custom:允许开发者自定义作用域。

    选择合适的作用域是根据具体的需求和场景来决定的。通常情况下,默认的Singleton作用域即可满足大部分需求。但在一些特殊情况下,例如需要每次请求都创建一个新的对象实例,或者需要每个用户会话都有自己的对象实例等,就需要使用相应的作用域来实现。

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

    在Spring框架中,Bean的作用域决定了一个Bean实例在容器中的生命周期和可见性。Spring提供了以下几种作用域:

    1. Singleton(默认):容器中只存在一个Bean实例,所有对该Bean的请求都会返回同一个实例。这是Spring中最常见的作用域。

    2. Prototype:每次从容器中获取Bean实例时都会创建一个新的实例。这意味着每次对该Bean的请求都会返回一个新的实例。

    3. Request:每次HTTP请求都会创建一个新的Bean实例,每个请求都拥有独立的实例。该作用域仅在Web应用程序中有效。

    4. Session:每个HTTP会话都会创建一个新的Bean实例,该作用域仅在Web应用程序中有效。

    5. Global Session:与Session作用域类似,但仅在基于portlet的web应用程序中有效。

    6. Application:容器中只存在一个Bean实例,作用域为整个应用程序上下文。该作用域仅在Web应用程序中有效。

    7. Websocket:每个WebSocket会话都会创建一个新的Bean实例。

    下面详细介绍每个作用域的使用方法和操作流程。

    Singleton作用域

    Singleton作用域是Spring中默认的作用域,同时也是最常用的作用域。当一个Bean的作用域设置为Singleton时,Spring容器会在容器初始化时创建Bean的实例,并在后续的请求中返回同一个实例。可以使用以下方式来设置Bean的作用域为Singleton:

    @Component
    @Scope("singleton")
    public class MySingletonBean {
        // Bean的实现代码
    }
    

    Prototype作用域

    Prototype作用域表示每次请求都会创建一个新的Bean实例。可以使用以下方式来设置Bean的作用域为Prototype:

    @Component
    @Scope("prototype")
    public class MyPrototypeBean {
        // Bean的实现代码
    }
    

    Request作用域

    Request作用域表示每次HTTP请求都会创建一个新的Bean实例。可以使用以下方式来设置Bean的作用域为Request:

    @Component
    @Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
    public class MyRequestBean {
        // Bean的实现代码
    }
    

    需要注意的是,使用Request作用域的Bean需要在Web应用程序中才能生效。

    Session作用域

    Session作用域表示每个HTTP会话都会创建一个新的Bean实例。可以使用以下方式来设置Bean的作用域为Session:

    @Component
    @Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
    public class MySessionBean {
        // Bean的实现代码
    }
    

    需要注意的是,使用Session作用域的Bean需要在Web应用程序中才能生效。

    Global Session作用域

    Global Session作用域与Session作用域类似,但仅在基于portlet的Web应用程序中有效。设置Global Session作用域的方式与Session作用域类似:

    @Component
    @Scope(value = "globalSession", proxyMode = ScopedProxyMode.TARGET_CLASS)
    public class MyGlobalSessionBean {
        // Bean的实现代码
    }
    

    Application作用域

    Application作用域表示整个Web应用程序中只存在一个Bean实例。可以使用以下方式来设置Bean的作用域为Application:

    @Component
    @Scope(value = "application", proxyMode = ScopedProxyMode.TARGET_CLASS)
    public class MyApplicationBean {
        // Bean的实现代码
    }
    

    需要注意的是,使用Application作用域的Bean需要在Web应用程序中才能生效。

    Websocket作用域

    Websocket作用域表示每个Websocket会话都会创建一个新的Bean实例。可以使用以下方式来设置Bean的作用域为Websocket:

    @Component
    @Scope(value = "websocket", proxyMode = ScopedProxyMode.TARGET_CLASS)
    public class MyWebsocketBean {
        // Bean的实现代码
    }
    

    这些就是Spring框架中Bean的作用域的使用方法和操作流程,不同的作用域适用于不同的场景,可以根据实际需求选择合适的作用域。

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

400-800-1024

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

分享本页
返回顶部