spring概念理解

alias

<alias name="person" alias="person2"></alias>

挺早之前,如果我要对一个别人定义好的bean起一个别名,而我没有修改applicationContext.xml的权限,那么我可以在另一个配置文件里使用别名alias。

scope

spring中的对象其实只有两种作用域,单例和每次都new出一个对象。

  • singleton
  • prototype

而websocket,request,session和application这四种scope中,对象也是单例的,他们和singleton的不同,只在于对象和socket链接,请求,会话或者应用这四种生命周期绑定了。

简单举个例子,在一次请求中,一个bean的scope=request,那么该对象在这次请求中是单例的。但是与另一个请求中的相应的bean不是同一个对象。

循环依赖(cyclic reference)

假设有三个类A,B,C。A依赖B,B依赖C,C依赖A,如此形成了循环依赖。那么Spring是如何帮我们创建有循环依赖的类的呢?

  • 当三个类都是prototype,不能创建成功
  • 当至少一个类是singleton,可以创建成功

spring实例化对象的机制:单例模式的对象,在spring中会被直接实例化;而prototype的会检查引用,如果有引用对象没有被实例化,暂停实例化,去实例化引用对象。
若A是单例的,B是原型的。那么两次get出的A的bean,a1和a2的引用b1和b2是同一个对象。其实很好理解,并不是说B变成了单例的,而是因为a1和a2本就是一个对象,二者对于B的引用地址当然也是同一个。
循环依赖的弊端:垃圾回收的时候,不会回收循环依赖的对象,造成内存泄漏。但是单例对象倒还好,不会占用太多内存,因此是可以容忍的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值