bean的作用域用于确定哪种类型的bean实例应该从容器中返回给调用者。作用域主要有以下五种:

    作用域 描述
    singleton 在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,bean作用域范围的默认值。
    prototype 每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean()。
    request 每次HTTP请求都会创建一个新的Bean,该作用域仅适用于web的Spring WebApplicationContext环境。
    session 同一个HTTP Session共享一个Bean,不同Session使用不同的Bean。该作用域仅适用于web的Spring WebApplicationContext环境。
    global-session 集群环境会话范围,全局会话范围,不是集群的话它就是session

    (1)singleton 单实例

    1. <bean id="test" class="com.lichneghao.Test" scope="singleton"/>

    单例类型,在容器启动的时候自动创建bean对象,无论你是否使用。对于所有bean请求,只要id与该bean定义的相匹配,那么就会返回同一个bean对象。

    容器会对这个bean负责到底,直到销毁这个bean,这一点和下面prototype作用域是有区别的

    (2)prototype 多实例

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

    容器启动的时候,不会自动创建bean,只有去请求bean才会创建bean,并且每次都返回一个新的bean。

    所以对于有状态的bean应该使用prototype作用域。

    需要注意的是:容器把这个bean给了客户端后,客户端就要对这个bean以后的生命负责了,容器就不管了,例如销毁什么的需要客户端自己去处理

    (3)request

    bean定义如下所示:

    1. <bean id="test" class="com.lichneghao.Test" scope="request"/>

    对于每个http请求,spring容器都会创建一个test bean实例。在请求内可以随便修改bean的状态,一旦请求结束这个bean也就会会随之销毁。

    (4)session

    每次会话创建一个实例

    1. <bean id="test" class="com.lichneghao.Test" scope="session"/>