Spring Bean 范围

##Scope分类

scope 范围说明
singleton(默认)每个Spring IoC容器定义单个bean实例
prototype任意数量的对象实例
request每个HTTP请求都有自己的Bean实例
sessionHTTP会话的生命周期将共用同一个Bean实例
globalSession全局HTTP会话的生命周期将共用同一个Bean实例。仅在Portlet上下文中使用时有效
applicationServletContext的生命周期将共用一个Bean实例
websocketWebSocket的生命周期将共用同一个Bean实例

其中 request, session, globalSession, application, websocket 只有使用Web的容器时候才有效.如果在ClassPathXmlApplicationContext中使用时,将会抛出IllegalStateException

##Scope详解

###Singleton(单例)

只管理bean的一个共享实例,并且Spring容器对所有对具有与该bean定义匹配的请求返回同一个bean实例。也就是说,当一个bean作为一个singleton作用域时,Spring IoC容器只创建一个该bean定义的对象​​实例。这个实例存储在缓存中,所有后续请求和引用都返回缓存的对象。如下图所示:

Spring的单例模式,不同于设计模式中的单例模式,Spring的单例模式是强制同一个容器只创建和使用一个实例,而设计模式中的单例模式是强制每个ClassLoader只创建一个实例。

###Prototype(原型)

每次对bean的请求时都会创建新的bean实例。bean被注入到另一个bean中,或者通过对容器的getBean()方法调用来请求它。

Spring容器对原型作用域bean的创建,其实就是替代Java new操作符。

不管范围如何,所有对象会调用初始化生命周期方法(init-method),但在原型的情况下,Bean不会回调销毁生命周期方法(destroy-method)

通常,对所有有状态bean使用原型作用域,对无状态bean使用单例作用域。

##测试代码

测试代码

Bean定义

测试结果如下图:

转载于:https://my.oschina.net/Jkiss/blog/847718

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值