在Spring框架中,Bean的作用域(Scope)定义了Bean实例的生命周期和可见范围。Spring支持以下几种常见的Bean作用域:

  1. Singleton(默认):

    • 单例作用域是Spring中默认的作用域。在单例模式下,容器中只存在一个Bean实例,该实例在容器启动时被创建,之后一直存在于整个应用程序的生命周期中。所有对该Bean的请求都返回同一个实例。
    @Component
    public class MySingletonBean {
        // ...
    }
    
  2. Prototype:

    • 原型作用域表示每次请求都会创建一个新的Bean实例。每次调用getBean()方法或注入依赖时,都会返回一个新的Bean实例。
    @Component
    @Scope("prototype")
    public class MyPrototypeBean {
        // ...
    }
    
  3. Request:

    • 请求作用域仅在Web应用程序中有效,表示每个HTTP请求都会创建一个新的Bean实例。该Bean实例仅在当前HTTP请求范围内有效。
    @Component
    @Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
    public class MyRequestScopedBean {
        // ...
    }
    
  4. Session:

    • 会话作用域也仅在Web应用程序中有效,表示每个HTTP会话都会创建一个新的Bean实例。该Bean实例在整个HTTP会话期间都是有效的。
    @Component
    @Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
    public class MySessionScopedBean {
        // ...
    }
    
  5. GlobalSession:

    • 全局会话作用域是在分布式环境中使用的一种作用域,表示全局性的HTTP会话。类似于SESSION作用域,但适用于分布式环境。
    @Component
    @Scope(value = WebApplicationContext.SCOPE_GLOBAL_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
    public class MyGlobalSessionScopedBean {
        // ...
    }
    
  6. Application:

    • 应用程序作用域表示在整个Web应用程序中只存在一个Bean实例。该Bean实例在整个Web应用程序的生命周期内都有效。
    @Component
    @Scope(value = WebApplicationContext.SCOPE_APPLICATION, proxyMode = ScopedProxyMode.TARGET_CLASS)
    public class MyApplicationScopedBean {
        // ...
    }
    

需要注意的是,除了Singleton作用域外,其他作用域主要用于Web应用程序,因为它们依赖于HTTP请求和会话。在非Web环境中,通常使用Singleton和Prototype作用域。

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.