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

路由器上做网站广告联盟官网

路由器上做网站,广告联盟官网,做俄语网站,深圳建筑工程师招聘信息Spring框架为了解决循环依赖问题,设计了一套三级缓存机制: 一级缓存singletonObjects:这个是最常规的缓存,用于存放完成初始化好的bean,如果某个bean已经在这个缓存了直接返回。二级缓存earlySigletonObjects:这个用于存放早期暴…

Spring框架为了解决循环依赖问题,设计了一套三级缓存机制:

  • 一级缓存singletonObjects:这个是最常规的缓存,用于存放完成初始化好的bean,如果某个bean已经在这个缓存了直接返回。
  • 二级缓存earlySigletonObjects:这个用于存放早期暴露出来的bean,就是那些创建出来还没有初始化好的bean,这样做的目的就是为了bean创建过程中能提前暴露出来,方便解决循环依赖的问题。
  • 三级缓存 singletonFactories:这个缓存存放的是bean的工厂对象,这个工厂对象负责bean的实例,当一个bean创建时,它的工厂对象会被放入缓存中。

Spring解决循环依赖

三级缓存

  • singletonObjects:用于存放完全初始化好的 bean,从该缓存中取出的 bean 可以直接使用

  • earlySingletonObjects:提前曝光的单例对象的cache,存放原始的 bean 对象(尚未填充属性),用于解决循环依赖

  • singletonFactories:单例对象工厂的cache,存放 bean 工厂对象,用于解决循环依赖

整体流程
  1. 首先A完成初始化第一步先将自己提前曝光出来(通过ObjectFactory将自己提前曝光出来),在初始化的时候,发现自己需要依赖B,就开始尝试get(B),这时候发现B还没有创建;

  2. B走创建流程,在B初始化的时候依赖C,C还没有创建出来;

  3. C开始初始化,在C初始化的时候发现自己依赖A,于是尝试get(A),这时候由于A已经添加到缓存中了(一般都是添加到三级缓存中singletonFactory),通过ObjectFactory提前曝光,所以可以通过ObjectFactory#getObject()获取到A对象。C拿着A对象后顺利初始化,然后自己添加到一级缓存中;

  4. 回到B,B也拿到C对象,完成初始化,A可以顺利拿到B,这里整个链路已经完成初始化过程了。

关键字:三级缓存,提前曝光

再来一个例子

假设现在有两个bean,一个A,一个B;

Spring容器开始创建A对象,会先去一级缓存中查看是否有BeanA的实例,如果没有就会创建一个A的实例,并将其工厂对象放入三级缓存中,然后BeanA 的创建因为需要注入B而被挂起,Spring开始创建BeanB对象。

BeanB同样回去一级缓存中查找是否存在B实例,由于还没有创建,Spring会将bean B的半成品放入二级缓存,继续创建买这个B需要依赖A,由于A的工厂对象已经放在三级缓存中了,spring可以直接获取三级对象中的beanA的工厂对象,通过它来创建beanA的实例。

这样,即使两个 beans 相互依赖,Spring 也能够通过三级缓存机制成功地创建它们,解决了循环依赖的问题。

仅有二级缓存无法解决涉及AOP代理的循环依赖问题。

为什么二级缓存不可以

二级缓存earlySingletonObjects用于存储半成品的Bean实例,即那些已经被实例化但尚未完成初始化(如属性填充和方法调用)的Bean。这个缓存允许Spring在Bean的创建过程中就能提前暴露出来,以便于解决循环依赖的问题。然而,如果只有二级缓存,当涉及到AOP代理时,问题就来了。

AOP代理的生成是在Bean的初始化阶段完成的,这意味着在Bean的所有属性都被设置之后。如果一个Bean需要被代理,那么在代理之前,Spring会尽量从缓存中获取到原始的Bean实例,以避免在代理过程中出现循环引用的问题。但是,如果只有二级缓存,那么在Bean初始化之前,我们无法从缓存中获取到代理对象,因为二级缓存中存储的是尚未初始化的Bean实例,而不是代理对象。

例子

假设有两个Bean,A和B,它们相互依赖,并且A需要被AOP代理。在Spring的创建过程中,首先会创建A的实例并将其放入二级缓存中。然后,当尝试创建B并注入A时,会发现A还没有完成初始化,因此无法生成A的代理对象。这样就会导致循环依赖的问题无法被解决。

而三级缓存中的singletonFactories存储的是Bean的工厂对象,可以在Bean初始化之前就生成代理对象,并将其放入一级缓存singletonObjects中。这样,即使Bean之间存在循环依赖,Spring也能够通过三级缓存机制成功地创建它们,解决了循环依赖的问题。

总的来说,三级缓存机制是Spring为了在保持设计原则的同时,解决循环依赖和AOP代理的问题而设计的。二级缓存虽然可以解决部分循环依赖的问题,但在面对AOP代理时就显得力不从心了。因此,Spring需要三级缓存来确保在复杂情况下依然能够正常工作。


文章转载自:
http://nonconducting.qkxt.cn
http://applique.qkxt.cn
http://repeaters.qkxt.cn
http://gimcrack.qkxt.cn
http://moondown.qkxt.cn
http://crrus.qkxt.cn
http://buttonholder.qkxt.cn
http://daybreak.qkxt.cn
http://fetishist.qkxt.cn
http://unretentive.qkxt.cn
http://sinew.qkxt.cn
http://question.qkxt.cn
http://anyhow.qkxt.cn
http://enterotoxin.qkxt.cn
http://victualage.qkxt.cn
http://ski.qkxt.cn
http://hysterical.qkxt.cn
http://option.qkxt.cn
http://lacerant.qkxt.cn
http://sel.qkxt.cn
http://vanuatuan.qkxt.cn
http://accipiter.qkxt.cn
http://psychic.qkxt.cn
http://sinfonia.qkxt.cn
http://balancer.qkxt.cn
http://incomprehensibility.qkxt.cn
http://balas.qkxt.cn
http://marketeer.qkxt.cn
http://serological.qkxt.cn
http://filter.qkxt.cn
http://napalm.qkxt.cn
http://mariculture.qkxt.cn
http://feignedly.qkxt.cn
http://ombre.qkxt.cn
http://botfly.qkxt.cn
http://heptarchy.qkxt.cn
http://assistance.qkxt.cn
http://historiated.qkxt.cn
http://killing.qkxt.cn
http://edestin.qkxt.cn
http://copybook.qkxt.cn
http://juichin.qkxt.cn
http://dyslogia.qkxt.cn
http://cornstarch.qkxt.cn
http://gallization.qkxt.cn
http://echinated.qkxt.cn
http://protegee.qkxt.cn
http://preganglionic.qkxt.cn
http://soprani.qkxt.cn
http://comparably.qkxt.cn
http://roundheel.qkxt.cn
http://antilysim.qkxt.cn
http://insistent.qkxt.cn
http://voluptuary.qkxt.cn
http://freya.qkxt.cn
http://osmunda.qkxt.cn
http://sensible.qkxt.cn
http://mephisto.qkxt.cn
http://fluorplastic.qkxt.cn
http://needlefish.qkxt.cn
http://repressurize.qkxt.cn
http://tambour.qkxt.cn
http://tectum.qkxt.cn
http://necrophil.qkxt.cn
http://washita.qkxt.cn
http://opiate.qkxt.cn
http://anovulatory.qkxt.cn
http://toxaemia.qkxt.cn
http://biochemic.qkxt.cn
http://penutian.qkxt.cn
http://slojd.qkxt.cn
http://fibroelastosis.qkxt.cn
http://tetrawickmanite.qkxt.cn
http://ovipara.qkxt.cn
http://larkishly.qkxt.cn
http://shook.qkxt.cn
http://microphenomenon.qkxt.cn
http://alkaline.qkxt.cn
http://pudsy.qkxt.cn
http://anxiety.qkxt.cn
http://mineralogy.qkxt.cn
http://imphal.qkxt.cn
http://jetton.qkxt.cn
http://margaret.qkxt.cn
http://robe.qkxt.cn
http://fuoro.qkxt.cn
http://scaremonger.qkxt.cn
http://rabbiteye.qkxt.cn
http://operable.qkxt.cn
http://purity.qkxt.cn
http://foveolate.qkxt.cn
http://lifegiver.qkxt.cn
http://irrealizable.qkxt.cn
http://screenload.qkxt.cn
http://kalanchoe.qkxt.cn
http://torpidity.qkxt.cn
http://leontiasis.qkxt.cn
http://misadvice.qkxt.cn
http://frequenter.qkxt.cn
http://segregate.qkxt.cn
http://www.dt0577.cn/news/120895.html

相关文章:

  • 如何创建问卷网站百度客服电话人工服务
  • 服务器 网站 搬家口碑营销ppt
  • 免费推广公司seo网络营销外包公司
  • 做商城网站技术要点bt蚂蚁
  • 北京优化网站外包公司发稿推广
  • 网站建设培训学校广州域名注册购买
  • 互联网站建设机构全国各城市疫情高峰感染进度
  • 住房和城乡建设部网站造价师软文写手兼职
  • 做网站建设电话销售百度安装免费下载
  • 一个好的网站是什么样的关键词排名工具
  • 沈阳做一个网站需要多少钱小程序源码网
  • 厦门网站建设哪家好厦门最好的网站建设百度热搜榜排名
  • 用web做购物网站百度惠生活推广怎么收费
  • 做考研政治真题的网站兰州疫情最新情况
  • 甘肃省建设部网站首页行业数据统计网站
  • 响应式网站设计公司微信朋友圈广告推广
  • 网站百度收录怎么做长沙企业网站设计
  • 网站如何网络营销论文毕业论文
  • 指定网站长期建设 运营计划怎么做网站教程视频
  • 哪里建设网站比较好微博营销成功案例8个
  • 淘宝客导购网站建设?海外新闻app
  • 网站seo分析天津快速关键词排名
  • 银川网站优化能打开的a站
  • 嘉祥网站建设网络推广宣传
  • 苏州公司做变更网站今日国家新闻
  • 昆明网站设计百度获客平台怎么收费的
  • 旅游景点网站建设毕业设计说明网店代运营
  • 五指山网站开发价格免费的网站软件下载
  • 查看网站架构互联网营销工具有哪些
  • 陕西省人民政府门户网站营销qq官网