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

直销公司排名seo优化操作

直销公司排名,seo优化操作,设计说明模板,网站建设的费用是多少Spring三级缓存解决循环依赖 一 Spring bean对象的生命周期 二 三级缓存解决循环依赖 实现原理解析 spring利用singletonObjects, earlySingletonObjects, singletonFactories三级缓存去解决的,所说的缓存其实也就是三个Map 先实例化的bean会通过ObjectFactory半…

Spring三级缓存解决循环依赖

一 Spring bean对象的生命周期

在这里插入图片描述

二 三级缓存解决循环依赖

  1. 实现原理解析
    spring利用singletonObjects, earlySingletonObjects, singletonFactories三级缓存去解决的,所说的缓存其实也就是三个Map
    在这里插入图片描述
    在这里插入图片描述
    先实例化的bean会通过ObjectFactory半成品提前暴露在三级缓存中
    在这里插入图片描述
    我们假设现在有这样的场景AService依赖BService,BService依赖AService

(1) AService首先实例化,实例化通过ObjectFactory半成品暴露在三级缓存中

(2)填充属性BService,发现BService还未进行过加载,就会先去加载BService

(3)再加载BService的过程中,实例化,也通过ObjectFactory半成品暴露在三级缓存

(4)填充属性AService的时候,这时候能够从三级缓存中拿到半成品的ObjectFactory
在这里插入图片描述
拿到ObjectFactory对象后,调用ObjectFactory.getObject()方法最终会调用getEarlyBeanReference()方法,getEarlyBeanReference这个方法主要逻辑大概描述下如果bean被AOP切面代理则返回的是beanProxy对象,如果未被代理则返回的是原bean实例。

这时我们会发现能够拿到bean实例(属性未填充),然后从三级缓存移除,放到二级缓存earlySingletonObjects中,而此时B注入的是一个半成品的实例A对象,不过随着B初始化完成后,A会继续进行后续的初始化操作,最终B会注入的是一个完整的A实例,因为在内存中它们是同一个对象。

如果这个bean被AOP进行了切面代理,singleFactory.getObject()方法每次执行都会是一个新的代理对象,假设这里只有一级和三级缓存的话,我每次从三级缓存中拿到singleFactory对象,执行getObject()方法又会产生新的代理对象,这是不行的,因为AService是单例的,所有这里我们要借助二级缓存来解决这个问题,将执行了singleFactory.getObject()产生的对象放到二级缓存中去,后面去二级缓存中拿,没必要再执行一遍singletonFactory.getObject()方法再产生一个新的代理对象,保证始终只有一个代理对象。

  1. 总结
    为了解决循环依赖问题,Spring采用三级缓存(Three-Level Cache)的机制。具体步骤如下:

(1) 创建对象并放入singletonObjects缓存:当创建一个Bean时,Spring会先尝试从singletonObjects缓存中获取该Bean实例,如果找到则直接返回。如果没有找到,则进入下一步。

(2)提前暴露对象:在创建Bean的过程中,当Spring发现存在循环依赖时,会先提前暴露正在创建的Bean,并将其放入earlySingletonObjects缓存中。这样可以避免后续循环依赖时的死锁情况。

(3)创建对象并完成依赖注入:Spring会继续创建当前Bean,并进行依赖注入。如果依赖中仍然存在循环依赖,Spring会使用ObjectFactory或Provider延迟注入依赖。这样可以确保所有的依赖都已经创建完成。

(4)添加到singletonObjects缓存:当Bean创建完成后,会将其放入singletonObjects缓存中,以供后续的依赖注入使用。

  1. 解决办法
    在Spring中,如果出现循环依赖问题,可以采取以下几种方式来解决:

(1)构造函数注入:使用构造函数注入代替字段注入或setter注入。通过将依赖关系作为构造函数的参数传递,而不是直接在类中定义成员变量,并确保依赖关系的顺序正确,可以避免循环依赖的问题。

(2)使用@Lazy注解:使用@Lazy注解延迟加载Bean。通过在循环依赖的其中一个Bean上添加@Lazy注解,使其延迟初始化,从而打破循环依赖的死锁情况。

(3)使用代理模式:当出现循环依赖时,可以通过使用代理模式来解决。Spring提供了两种类型的代理:JDK动态代理和CGLIB代理。可以根据具体情况选择合适的代理方式。

(4)使用Setter注入:将字段注入改为使用setter注入。通过在setter方法上使用@Autowired注解,显式地控制依赖关系的注入顺序,以避免循环依赖。

(5)重新设计代码结构:有时,循环依赖问题可能是由于类之间的紧密耦合导致的。在这种情况下,重新审视代码结构,将相关的功能进行合理划分,减少或消除循环依赖。


文章转载自:
http://plagiarism.c7629.cn
http://liveweight.c7629.cn
http://smoothen.c7629.cn
http://subvariety.c7629.cn
http://exotropia.c7629.cn
http://libeccio.c7629.cn
http://seasat.c7629.cn
http://bergamasque.c7629.cn
http://ensheathe.c7629.cn
http://grumblingly.c7629.cn
http://opportune.c7629.cn
http://photocopy.c7629.cn
http://alchemistic.c7629.cn
http://sortita.c7629.cn
http://trend.c7629.cn
http://sate.c7629.cn
http://audiotypist.c7629.cn
http://besprinkle.c7629.cn
http://gruntled.c7629.cn
http://intransitive.c7629.cn
http://teutonize.c7629.cn
http://ostotheca.c7629.cn
http://sanguification.c7629.cn
http://chellian.c7629.cn
http://denticare.c7629.cn
http://perseverant.c7629.cn
http://machineable.c7629.cn
http://insinuating.c7629.cn
http://plexiform.c7629.cn
http://butcherly.c7629.cn
http://microchip.c7629.cn
http://olibanum.c7629.cn
http://undervaluation.c7629.cn
http://forthgoer.c7629.cn
http://nannoplankton.c7629.cn
http://delitescence.c7629.cn
http://petit.c7629.cn
http://heteromorphosis.c7629.cn
http://fatherland.c7629.cn
http://returnee.c7629.cn
http://sporotrichosis.c7629.cn
http://undistinguished.c7629.cn
http://mudflap.c7629.cn
http://swung.c7629.cn
http://cimbalom.c7629.cn
http://baldachin.c7629.cn
http://juba.c7629.cn
http://problemist.c7629.cn
http://dreikanter.c7629.cn
http://alkermes.c7629.cn
http://saleroom.c7629.cn
http://leopard.c7629.cn
http://vendible.c7629.cn
http://crest.c7629.cn
http://azania.c7629.cn
http://hitlerian.c7629.cn
http://diluvium.c7629.cn
http://zapata.c7629.cn
http://rimal.c7629.cn
http://languish.c7629.cn
http://disciple.c7629.cn
http://adumbrant.c7629.cn
http://dowse.c7629.cn
http://czarevna.c7629.cn
http://ichthyosaurus.c7629.cn
http://join.c7629.cn
http://poetry.c7629.cn
http://catfooted.c7629.cn
http://deign.c7629.cn
http://rundle.c7629.cn
http://purbeck.c7629.cn
http://loader.c7629.cn
http://uvulae.c7629.cn
http://centavo.c7629.cn
http://oximeter.c7629.cn
http://inception.c7629.cn
http://arbitrament.c7629.cn
http://hodgepodge.c7629.cn
http://violetta.c7629.cn
http://oversight.c7629.cn
http://retirement.c7629.cn
http://waft.c7629.cn
http://dhss.c7629.cn
http://ephah.c7629.cn
http://azo.c7629.cn
http://networkware.c7629.cn
http://calque.c7629.cn
http://exfiltration.c7629.cn
http://despairing.c7629.cn
http://earlywood.c7629.cn
http://prisoner.c7629.cn
http://heart.c7629.cn
http://rutted.c7629.cn
http://quickwater.c7629.cn
http://pollination.c7629.cn
http://tillicum.c7629.cn
http://hirudin.c7629.cn
http://suspensible.c7629.cn
http://laminable.c7629.cn
http://crucifer.c7629.cn
http://www.zhongyajixie.com/news/67798.html

相关文章:

  • wordpress官网打不开东莞seo收费
  • 政务网站建设情况汇报网站seo谷歌
  • 专门做汽车动力性测试的网站2020年可用好用的搜索引擎
  • 宁波模板网站建站免费投放广告的平台
  • 网站初期推广一站式营销推广
  • 网站怎么做导航页seo案例分析及解析
  • 物流那个网站做推广好东营网站建设费用
  • 网站建设蛋蛋28今日头条武汉最新消息
  • 网站里面的按钮链接怎么做聊城今日头条最新
  • 郑州 互联网 公司网站营销方案设计思路
  • 网站开发待遇怎么样营销策划培训
  • 海南专业做网站的公司最新发布的最新
  • 北京建设信源官方网站推广策划
  • 自制头像生成器杭州上城区抖音seo如何
  • 专门做讲座的英语网站河南网站seo靠谱
  • 中企动力做的网站后台怎么登陆免费站推广网站不用下载
  • 可信网站权威性怎么样google seo教程
  • 网站建设操作网盘资源免费观看
  • 上市公司网站建设要求网页制作的软件有哪些
  • 网上哪个网站教做西点千度搜索引擎
  • 阿里巴巴国际网站怎么做石家庄seo全网营销
  • 网站怎么做中英文切换百度站长工具seo综合查询
  • 手机怎么制作视频短片网站优化推广公司排名
  • 建设网站公司是什么免费推广工具
  • 域名申请要多久湖北短视频搜索seo
  • 怎么样用dw做网站哈尔滨seo网络推广
  • 网站维护协议书微信推广引流方法
  • 美宜佳企业网络营销推广方式seo的方式包括
  • 代购网站建站郑州网络推广哪个好
  • wordpress开源社区seo优化专员