Spring bean 作用域

[题目]

Spring中定义bean的作用域时,使用singleton和prototype有何区别?

[正确答案]

      singleton作用域:当把一个Bean定义设置为singleton作用域时,Spring IoC容器中只会存在一个共享的Bean实例,并且所有对Bean的请求(将其注入到另一个Bean中,或者以程序的方式调用容器的getBean()方法),只要id与该Bean定义相匹配,则只会返回该Bean的同一实例,可以理解为单例模式。

prototype作用域:prototype作用域的Bean会导致在每次对该Bean请求时都会创建一个新的Bean实例。

[面试技术点]

Spring bean定义的作用域概念。

[解读]

      小博老师用一个简单的例子说明singleton与prototype的区别。

      比如有一个User类定义如下:


Spring配置文件中bean的定义如下:


测试用例代码如下:



执行结果为:


User is initialized.

 

如果把bean的scope修改为prototype:



再次运行测试用例,结果为:


User is initialized.


User is initialized.


从上面的例子可以看出,当bean的scope配置为singleton的时候,通过spring context获取bean的实例,只会初始化一次。也就说明singletone是单例模式。


当bean的scope配置为prototype时,通过spring context获取bean的实例,每次都会初始化,也就是说每次都新建了一个对象。


[扩展]


Spring框架支持以下五种bean的作用域:


singleton: bean在每个SpringIoC 容器中只有一个实例。


prototype:一个bean的定义可以有多个实例。


request:每次http请求都会创建一个bean,该作用域仅在基于web的SpringApplicationContext情形下有效。


session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。


global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。


缺省的Spring bean 的作用域是singleton。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值