官方给出了6种作用范围,其实做常用的就是singleton和prototype。而且在之前的例子中,也已经大致的介绍了它们,这篇博客其实更多的时扩展。
singleton
singleton,被翻译作“单例”,也就是只有一个实例。
对singleton的每一次请求(即通过ref注入或者通过getBean()获得实例时)都是请求的同一个对象。
是不是很像设计模式的单例模式?其实还是有区别的,请继续往下看。
1.与设计模式的单例模式有一些区别
官方文档特别指出,Spring的singleton与GoF(“四人帮”)设计模式中的单例模式不同。Spring中的singleton,是指在管理它的容器中,仅有一个实例。而对于GoF设计模式种的单例模式是说某个类在整个系统中只有一个实例。也就是说,Spring允许多个容器中都存在一个同一个类的并且是singleton的bean;而单例模式只允许这个类有一个实例
2.生命周期
生命周期分为三个阶段:初始化、运行中和销毁。
初始化:默认情况下,单例bean都是非延迟初始化的(可以通过设置lazy-init="true"来让它变成延迟初始化)。也就是说,单例bean在容器启动时初始化,或者在第一次请求这个bean时(被ref引用或者被客户端通过getBean()请求)被创建。
运行时:这里引用一段官方文档的描述:
This single instance is stored in a cache of such singleton beans, and all subsequent reque