Spring——Bean scope

Spring framework 支持6个范围(scope),其中4个只能在用web-aware时才能使用。当然,你也可以创建自定义范围。

  1. singleton : spring默认就是singleton,即在注册该bean的时候,会把这个bean存储到单列bean缓存,以后对该bean的所有的后续请求和引用都会返回缓存中的这一个bean。但spring的singleton 与Gang of Four,GoF)模式的单例模式不一样,spring的singleton是相对与容器只有一个实例,但jvm中可能有多个容器,即有多个实例;所有,如果我们控制对象生命周期完全交给spring管理,可以达到单列模式的效果,即:对象不通过其他地方进行new 或反射等方式创建。

偷个图:在这里插入图片描述

  1. prototype:原型。能创建任意个新的bean实例,在你将bean注入到其他bean中或调用getBean()方法。一般prototype用于有状态的bean,singleton用于无状态的所有bean(如DAO)。

但有一点:Spring不管理原型bean的生命周期,容器实例化、配置或组装原型对象都交给客户端,自己不去对实例记录,也不会去configured destruction lifecycle callbacks are not called(怕自己理解有误)。所以,客户端代码必须清理原型作用域的对象以及引用,释放bean占用的宝贵资源,可通过自定义bean后台处理

  • 具有prototype bean依赖的sigleton bean:
    因为sigleton bean 被 容器实例化和解析注入依赖只发生一次,之后便被存储到缓存中了。所以prototype bean 将一直为初始化时候的那一个,但如果你想每次在sigleton bean运行时重复获取新的prototype bean,则可以通过方法注入的方式通过实现ApplicationContextAware接口,并生成一个getBean()方法,每次去获得新的bean。
    在这里插入图片描述
  1. Request, Session, Application, and WebSocket Scopes:这些是需要你use a web-aware Spring ApplicationContext implementation (such as XmlWebApplicationContext).等我学到web上再说吧🤪。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值