Spring支持的几种bean的作用域
Spring支持的几种bean的作用域
Spring容器中的bean可以分为5个范围
1.singleton:这种bean范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个bean的实例,单列的模式由beanfactory自身来维护。
2.prototype:原行范围与单例范围相反,为每一个bean请求提供一个实例。
3.request:在请求bean范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。
4.Seesion:与请求范围类似,确保每个Session中有一个bean的实例,在session过期后,bean会随之失效。
5.global-seesion:global-seesion和portlet应用相关。当你的应用部署在portlet容器中工作时,它包含很多portlet。
如果你要想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。全局作用域与Servlet中的session作用域效果相同。
Spring 中 bean 的加载过程:
- 获取配置文件资源;
- 对获取的 XML 资源进行一定的处理检验;
- 处理包装资源;
- 解析处理包装过后的资源;
- 加载提取 bean 并注册(添加到 beanDefinitionMap 中)。
Spring框架中的单例 Beans 是线程安全的么?
Spring 框架并没有对单例 bean 进行任何多线程的封装处理。关于单例 bean 的线程安全和并发问题需要开发者自行搞定。
但实际上,大部分的 Springbean 并没有可变的状态(比如Serview 类和 DAO 类),所以在某种程度上说 Spring 的单例 bean是线程安全的,如果你的bean 有多种状态的话(比如 ViewModel 对象),就需要自行保证线程安全。