前言:
所谓scope,是指用来声明 IOC 容器中的对象应该处的限定场景或着说是该对象的存货空间;即,在 IOC 容器在对象进入相应的 scope之前,生成并装配这些对象,在该对象不在处于这些 scope 的限定之后,容器通常会销毁这些对象。
1. scope 的分类:
在 Spring 2.0 之前,scope 有 singleton 和 prototype 两种;
而在 Spring 2.0 之后,为支持 web 应用的 ApplicatonContext,增加了另外三种:request、session、global session 专用于 web 应用程序上下文的 bean 的类型;因此,默认情况下 Spring 2.0 之后的版本有5种类型的 bean。当然,Spring 2.0 对 bean 的类型的设计进行了重构,并设计出灵活的 bean 类型支持,理论上可以有无数多种类型的 bean,用户可以根据自己的需要增加新的 bean 类型以满足实际应用得需要。
2. singleton (单一实例)
当 Spring 中某个 bean 的 scope 取值为 singleton 时,表示 Spring IOC 容器中只会存在一个共享的 bean 实例,并且所有对该 bean 的请求只要 id 与该 bean 定义相匹配,则只会返回 bean 的同一个实例。
也就是说,当把一个bean 定义设置为 singleton 作用域时,Spring IOC 容器只会创建该 bean 定义的唯一实例;这个单一实例会被存储到单例缓存 (s