美文网首页
Spring 的 Bean 作用域

Spring 的 Bean 作用域

作者: markeNick | 来源:发表于2020-08-31 11:05 被阅读0次

在默认情况下,Spring应用上下文中所有bean都是作为以单例(singleton)的形式创建的。也就是说,不管给定的一个bean被注入到其他bean多少次,每次所注入的都是同一个实例。

Spring定义了多种作用域,可以基于这些作用域创建bean,包括:

  • 单例(Singleton):在整个应用中,只创建bean的一个实例。
  • 原型(Prototype):每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean实例。
  • 会话(Session):在Web应用中,为每个会话创建一个bean实例。
  • 请求(Rquest):在Web应用中,为每个请求创建一个bean实例。

如果使用组件扫描来发现和声明bean,则可以使用 @Scope 注解指定bean的作用域,如:

@Scope("prototype")
@Component
public class test { ... }

如果使用xml配置bean,则可以使用<bean>元素的scope属性来设置作用域,如:

<bean id="test" class="com.bean.Test" scope="prototype" />

会话和请求作用域

如果我们希望不是所有用户都使用同一个bean,并且对于同一个用户来说,bean是单例的,那么可以使用会话作用域,即@Scope("session")

在这里@Scope还有一个proxyMode属性,这个属性解决了将会话或请求作用域的bean注入到单例bean中所遇到的问题。

假设我们有一个购物车ShoppingCart ,将其bean注入到单例的StoreService的Setter方法中,如:

@Component
@Scope(value="session", proxyMode=ScopedProxyMode.INTERFACES)
public ShoppingCart cart() { ... }

@Component
public class StoreService {
    @Autowired
    public void setShoppingCart(ShoppingCart shoppingCart) {
        this.shoppingCart = shoppingCart;
    }
}

StoreService是一个单例的bean,会在Spring应用上下文加载的时候创建。当创建的时候,Spring会尝试将ShoppingCart bean注入,但是由于ShoppingCart是会话作用域的,此时并不存在,只有当用户进入系统,创建了会话才会出现ShoppingCart实例。

每个用户都有一个ShoppingCart实例。我们并不希望其注入到某个固定的ShoppingCart实例到StoreService中

Spring并不会将实际的ShoppingCart注入到StoreService中,Spring会注入一个ShoppingCart bean的代理

相关文章

  • SPRING BEAN的基础

    一、SPRING BEAN的定义: 二、SPRING BEAN的作用域: 作用域例子: your msg :p...

  • Spring Bean 作用域

    原文 :一文读懂Spring Bean作用域 - RelaxHeart网 Spring Bean的几种作用域 Sp...

  • Spring

    Spring Bean 作用域 Spring 3 中为 Bean 定义了 5 中作用域分别为 singleton(...

  • Spring_04_Bean的作用域

    Bean的作用域  当在Spring中定义个bean时,你必须声明bean的作用域选项.例如,为了强制Spring...

  • Bean的作用域

    Bean的作用域: singleton 当一个bean的作用域为singleton,那么Spring IoC容器中...

  • Bean的作用域

    Bean的作用域: singleton 当一个bean的作用域为singleton,那么Spring IoC容器中...

  • 7、Spring-XML-作用域

    一、概要 scope 用来配置 spring bean 的作用域。 在spring2.0之前,bean只有2种作用...

  • Spring-XML-作用域

    一、概要 scope 用来配置 spring bean 的作用域。 在spring2.0之前,bean只有2种作用...

  • Spring Bean的生命周期

    Spring 容器可以管理 singleton 作用域 Bean 的生命周期,在此作用域下,Spring 能够精确...

  • spring详解(二)

    ③容器中bean的作用域: |作用域|描述||---|---||singleton|单例模式,在整个Spring ...

网友评论

      本文标题:Spring 的 Bean 作用域

      本文链接:https://www.haomeiwen.com/subject/shrusktx.html