Spring框架学习笔记-Bean作用域

在配置文件中定义Bean时,用户不但可以配置Bean的属性以及相互的依赖关系,还可以定义Bean的作用域。作用域将对Bean的生命周期和创建方式产生影响,下面将列出Spring支持的所有作用域类型:

类别说明
singleton在Spring IoC容器中仅存在一个Spring实例,Bean以单实例的方式存在
prototype每次从容器中调用Bean时,都返回一个新的实例
request每次HTTP请求都会创建一个新的Bean。该作用域仅适用于WebApplicationContext环境
session同一个HTTP Session共享一个Bean,不同HTTP Session使用不同的Bean。该作用域仅适用于WebApplicationContext环境
globalSession同一个全局Session共享一个Bean,一般用于Portlet应用环境,该作用域仅适用于WebApplicationContext环境

我们下面主要介绍singleton作用域与prototype作用域。

1.singleton作用域

singleton的Bean在同一Spring IoC容器中只有一个实例,请看下面的例子:

<bean id="car" class="com.baobaotao.scope.Car" scope="singleton"/>
<bean id="boss1" class="com.baobaotao.scope.Boss"p:car-ref="car"/>
<bean id="boss2" class="com.baobaotao.scope.Boss"p:car-ref="car"/>
<bean id="boss3" class="com.baobaotao.scope.Boss"p:car-ref="car"/>

在这里插入图片描述
不但在配置文件中通过对象引用配置注入的car引用相同的car Bean,任何通过容器的getBean(“car”)方法返回的实例也指向同一个Bean
在默认情况下,Spring的ApplicationContext容器在启动时,自动实例化所有singleton的Bean并缓存于容器之中。虽然启动时会多花费一下时间,但是带来两个好处:
首先对Bean提前的实例化操作会及早发现一些潜在的配置问题;其次Bean以缓存的方式保存,当运行期使用到该Bean时就无需再实例化了,加快了运行的效率。

2.prototype作用域

<bean id="car" class="com.baobaotao.scope.Car" scope="prototype"/>
<bean id="boss1" class="com.baobaotao.scope.Boss"p:car-ref="car"/>
<bean id="boss2" class="com.baobaotao.scope.Boss"p:car-ref="car"/>
<bean id="boss3" class="com.baobaotao.scope.Boss"p:car-ref="car"/>

通过上面的配置,boss1、boss2、boss3所引用的都是一个新的car实例,每次通过容器的getBean(“car”)方法返回的也是一个新的Car实例。
在这里插入图片描述
在默认的情况下,Spring容器在启动时不实例化prototype的Bean。此外,Spring容器将prototype的Bean交给调用者后,就不再管理它的生命周期了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值