Spring源码学习之bean的prototype和singleton类型

今天学习spring源码的时候看到prototype和singleton,以前知道两者的区别,现在有点模糊了,所以就大概停下来回忆理解了一。


Spring创建bean有prototype(原始模型)和singleton(单列模型)两种类型。

在默认的情况下,Spring中创建的bean都是单例模式的。一般情况下,有状态的bean需要使用prototype模式,而对于无状态的bean一般采用singleton模式一般的dao都是无状态的)。


Singleton: Spring IoC容器中只会存在一个共享的bean实,并且所有对该bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。换言之,当把一个bean定义设置为singlton作用域时,Spring IoC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例。

Prototype: 每次对bean的请求都会创建一个新的bean实例(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法--只有getbean才会在容器中生成一个bean


在s2sh 项目中,struts2的action交由spring管理的时候,spring默认是singleton的,而struts2的action显然是有状态的,所以必须显示设置为scope="prototype",prototype为原型模式,每次action请求过来都会创建一个action。但是对那些Dao的实现类建议使用单列模式,scope="singleton" ,因为这些类没有状态,用singleton只需维护一个实例,性能高要一些。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值