当前位置: 首页 > news >正文

网页设计专业培训企业网站建设有名 乐云seo

网页设计专业培训,企业网站建设有名 乐云seo,什么网站可以做十万的分期付款,台州网站建设制作目录标题 1、什么是循环依赖2、解决循环依赖的原理3、Spring通过三级缓存解决循环依赖4、为什么要使用三级缓存而不是二级缓存?5、三级缓存中存放的是lambda表达式而不是一个半成品对象 1、什么是循环依赖 众所周知,Spring的容器中管理整个体系的bean对…

目录标题

    • 1、什么是循环依赖
    • 2、解决循环依赖的原理
    • 3、Spring通过三级缓存解决循环依赖
    • 4、为什么要使用三级缓存而不是二级缓存?
    • 5、三级缓存中存放的是lambda表达式而不是一个半成品对象

1、什么是循环依赖

众所周知,Spring的容器中管理整个体系的bean对象。每个bean对象是java中的一个实例化的完整对象。一个完整对象就包含属性和方法,一个对象中的属性可以是另外一个对象的引用。所以在这时就会出现A对象的属性是B,B的属性如果是A的话,则两个对象相关依赖,都无法完成实例化的属性赋值。

2、解决循环依赖的原理

在传统的获取对象的方式是通过new一个对象,并将各种属性值放入对象中,等一切初始化工作完成之后,将这个完整的对象返回给使用者。如果在设置属性时,值对象为空时,会抛出空指针问题,则创建失败。
Spring则是将整个bean的创建进行分步进行,并将创建的半成品bean对象进行缓存,等需要的属性对象完成创建之后,在回头完善这个半成品bean。如果在创建属性对象时,出现循环依赖的现象时,将半成品对象提供给属性对象,则属性对象能够完整创建,就解决了循环依赖的问题。

3、Spring通过三级缓存解决循环依赖

例如:A对象的属性是B对象,B对象的属性是A对象。
三级缓存分别是

  • 一级缓存singletonObjects
    • 初始大小为256
    • 存放完整的bean对象
  • 二级缓存earlySingletonObjects
    • 初始大小为16
    • 存放半成品的bean对象
  • 三级缓存singletonFactories
    • 初始大小为16
    • 存放singletonFactorie
    • singletonFactorie是一个函数接口,通过调用getObject方法会触发调用getEarlyBeanReference方法来获取一个半成品的bean对象。

从缓存的初始大小可以看出一级缓存才是存放bean的空间,二级三级缓存时为了解决一些特殊情况设置的。

Spring的bean创建过程可以分实例化对象、设置属性、后置初始化。

  • 首先A对象在实例化之后会创建A的原始对象,此时会将一个lambda表达式放入三级缓存中(() -> getEarlyBeanReference(beanName, mbd,bean)),然后进行下一步设置属性,此时B对象还没有创建,开始创建B对象,此时A对象的设置属性和初始化步骤还没有完成。
  • 在创建B的过程中,实例化对象之后也会讲原始对象通过三级缓存暴露出去。在B对象设置属性时,需要通过缓存中查找A对象,从一级缓存中开始查找,在三级缓存中找到A对象暴露出的singletonFactorie对象。
  • B对象成功设置对象之后,继续后续操作就可以创建一个完整的B对象,并将B对象放入一级缓存。在B对象创建完成之后,继续A对象的设置属性操作,设置完属性之后,A对象完成创建之后也放入一级缓存中。
  • 到此循环依赖解决

4、为什么要使用三级缓存而不是二级缓存?

因为A对象可能会存在代理对象的情况,如果A对象的代码中存在AOP的逻辑,则通过getEarlyBeanReference获取到的是A的代理对象。并且多次调用getEarlyBeanReference中的getObject会获取多个A的代理对象,所以如果只是二级缓存,会获取多个A的半成品代理对象违背了单例原则。
如果A没有代理的情况,只需要二级缓存就可以解决循环依赖。

5、三级缓存中存放的是lambda表达式而不是一个半成品对象

首先在现实情况下A对象并不是一定会出现循环以来的。A会在创建完成之后,将三级缓存中的缓存删除。
如果A对象需要实现代理,但是在bean的生命周期内,代理的操作是在A设置完属性之后,通过后续的beanPost操作实现的,如果在创建A的过程中就创建一个A对象的半成品代理对象是不符合Bean生命周期的设计。
所以缓存中存放的是lambda表达式,只有在发生循环依赖的情况下,并且被代理的时候,才会通过getObject来获取半成品代理对象。(兼容多种情况)

http://www.yayakq.cn/news/662434/

相关文章:

  • 做一个中型网站需要多少钱做分类信息网站代码
  • 延吉网站建设零库存品牌童装杭州网站建设
  • 做解析会员电影的网站百度免费网站制作
  • 如何注册公司需要多少钱成都网站优化服务
  • 荥阳网站建设价格成都市建设厅网站
  • 建设网站套餐广东省城乡与住房建设厅网站
  • 下载建网站宁晋seo网站优化排名
  • 唐山丰南建设局网站网站流量监控
  • 深圳品牌网站建设兰州公司做网站的价格
  • 沈阳信息港seo关键词排名优化方法
  • 网站建设应急处置方案app 开发 wordpress
  • 移动建站模板创建网站为啥要钱
  • 热 综合-网站正在建设中工作顺利
  • 什么叫网页什么叫网站广东今天新闻最新消息
  • 中国最大的库存尾货清货平台新建的网站怎么做seo优化
  • 辽宁省建设工程造价管理协会网站网站的建设模式是指什么时候开始
  • wordpress html 插件google seo整站优化
  • 厦门市思明区建设局网站现在有什么新型建筑模板
  • 免费网站建设作业总结网站建设责任分工
  • 一个主做海贼王的网站抚远佳木斯网站建设
  • 各大网站网络推广的收费app开发报价公司
  • 苏州网站推广优化网站建设公司专业的建站优化公司
  • 网站建设的研究背景如何让各大搜索引擎识别新建网站
  • 怎么找个人搭建网站网络规划师考哪些内容
  • 企业网站建设晋升郑州餐饮网站建设公司
  • app与网站用的服务器北京网络营销推广培训哪家好
  • 毕业设计除了网站还可以做啥网站怎么做悬浮图片
  • 个人网站 可以做淘宝客吗建设大型门户网站
  • 聊城网站建设策划建设公司海原县住房和城乡建设局网站
  • 青州住房建设局网站wordpress管理员页面404