Spring 中支持定义Bean的Scope种类有以下6种:
- Singletone: 每个Spring容器中唯一(单例子,默认容器初始化时预创建)
- Prototype: 每次向容器请求bean对象时,创建一个新的实例;
- Request: 只针对Web应用有效: 每次Http请求,创建一个Bean的实例;
- Session: 只在Web应用中有效,每个Session会话过程中有效,
- Application:只Web应用有效,整个Web应用中唯一;
- websocket: 只Web应用有效,WebSocket声明周期内唯一;
Singletone:
容器内唯一,通过ID访问,返回唯一一个实例;
Tips: Spring中Bean的singletone 与 单例的设计模式中的单例模式(Singletone Pattern)不同,
设计模式中的单例是指的: 单个类加载器中创建且只创建某个类的一个实例;
而此处的singletone作用域是指容器中只存在一个Bean定义的一个实例(而非某个类,完全可以定义两个Bean,class相同,id不同,对应不同BeanDefine)。
Prototype(原型):
原型作用域,每次向容器请求Bean的实例时,容器都会新建一个Bean的实例;
Tips:
- Prototype 一定程度上可以看作Spring实现的New操作;
- Spring容器不负责prototype作用域的对象的整个生命周期的管理,当初始化、装配完成后会将对象返回给客户端,初始化钩子函数会执行,但是清理钩子函数不会被自动调用,需要客户端负责清理工作。
Request
只适用于Web应用容器,每个Http请求会创建Bean的一个实例;
Session
只适用于Web应用容器,每个Session的声明周期中对应唯一的Bean实例;
Application
只适用于Web应用容器,Bean的实例在ServerletContext中唯一,通过attribute保存;