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

一个成功的网站必须具备如何用google搜索产品关键词

一个成功的网站必须具备,如何用google搜索产品关键词,大连疫情最新情况通报,新开传奇新服网循环依赖问题是在对象之间存在相互依赖关系,形成一个闭环,导致无法准确的完成对象的创建和初始化,当两个或多个对象彼此之间相互引用,这种相互引用形成一个循环时,就可能出现循环依赖问题。 在 Spring 框架中&#xf…

循环依赖问题是在对象之间存在相互依赖关系,形成一个闭环,导致无法准确的完成对象的创建和初始化,当两个或多个对象彼此之间相互引用,这种相互引用形成一个循环时,就可能出现循环依赖问题。

Spring 框架中,循环依赖(Circular Dependency)是指两个或多个 Bean 之间互相依赖,导致依赖关系形成一个闭环。例如:

  • Bean A 依赖 Bean B
  • Bean B 又依赖 Bean A

这种依赖会导致 Spring 无法正确实例化和初始化这些 Bean,因为在创建一个 Bean 时需要先创建它所依赖的 Bean,而它依赖的 Bean 又反过来依赖它


如何解决循环依赖

单例作用域的循环依赖,依赖于三级缓存来解决问题

  • 一级缓存(Singleton Objects): 存放已经完全初始化的单例 Bean。
  • 二级缓存(Early Singleton Objects): 存放原始的、尚未完全初始化的 Bean 实例(暴露了部分 Bean 的引用)。
  • 三级缓存(Singleton Factories): 存放 Bean 的对象工厂,延迟初始化

解决循环依赖的前提条件

  1. 互相依赖的Bean必须要是单例的Bean
  2. 依赖注入的方式不能都是构造函数注入的方式

当遇到循环依赖时,Spring 采取以下步骤

1.创建 Bean 的原始实例

  • Spring 首先根据构造器或工厂方法创建 Bean 的原始实例(即还未完成依赖注入和初始化)。
  • 这个实例此时不会立即暴露给其他 Bean。
  • ObjectFactory 放入三级缓存
  • Spring 会将一个能够生成该 Bean 的工厂对象(ObjectFactory放入三级缓存(singletonFactories)。

2.检测并解决依赖

  • 如果依赖的 Bean 已经创建,则直接从一级缓存(singletonObjects)中获取。
  • 如果依赖的 Bean 尚未完全初始化但已创建原始实例,Spring 会从三级缓存中通过 ObjectFactory 获取早期引用,并将其放入二级缓存(earlySingletonObjects)。
  • 从二级缓存中获取的 Bean 引用可能是代理对象,用于避免后续初始化重复。

3.完成依赖注入

  • 使用从一级缓存或二级缓存中获取的 Bean 引用,完成当前 Bean 的依赖注入。

4.完成 Bean 初始化

  • 初始化后,Spring 会将完全初始化的 Bean 放入一级缓存(singletonObjects),并从二级缓存和三级缓存中移除相关引用


为什么一定要使用三级缓存

1.首先,一级缓存一定是要的,因为Bean是单例模式,需要存放到某个容器中,而一级缓存就是这个缓存容器。

2.二级缓存可以不要,我们可以把半成品Bean放到一级缓存中,但这样需要给一级缓存中添加标识,标识哪些是完整对象,哪些都是半成品对象,这样有几个问题:                                        1.增加了Spring源码设计复杂性。                                                                                              2.在查询时,需要先判断标识,查询效率变低了。                                                                    3.违反单一设计原则。

因此为了解决这些问题,二级缓存也是必须要的。

3.三级缓存也可以不要,但这样也有一个问题,那就是Spring的设计模式中,在生成代理时,为了实现对象初始化和生成代理对象的解耦                                                                                     所以代理对象是在AnnotationAwareAspectJAutoProxyCreator 这个后置处理的最后一步生成AOP代理对象的。

如果不要三级缓存,那么我们需要在所有类创建之前,先将代理类创建出来,这样遇到循环依赖就可以直接拿出代理对象来使用了,但这种方式的缺点是打破了原理Spring 的设计理念。(实现对象初始化和生成代理对象的解耦)

所以最优方案是,不提前创建代理对象,而是使用三级缓存存储创建对象的表达式,等遇到循环依赖,再按照Spring的设计模式来生成代理对象。


文章转载自:
http://asclepiadic.zekgq.cn
http://adown.zekgq.cn
http://archicerebrum.zekgq.cn
http://bedsettee.zekgq.cn
http://canonist.zekgq.cn
http://alif.zekgq.cn
http://archeozoic.zekgq.cn
http://academy.zekgq.cn
http://affrontedness.zekgq.cn
http://chenab.zekgq.cn
http://agitational.zekgq.cn
http://astrologous.zekgq.cn
http://autoxidation.zekgq.cn
http://carbo.zekgq.cn
http://barothermogram.zekgq.cn
http://blottesque.zekgq.cn
http://amberoid.zekgq.cn
http://cargojet.zekgq.cn
http://aflatoxin.zekgq.cn
http://calcination.zekgq.cn
http://ageing.zekgq.cn
http://cameralistic.zekgq.cn
http://bulletproof.zekgq.cn
http://camellia.zekgq.cn
http://bested.zekgq.cn
http://airdash.zekgq.cn
http://achromycin.zekgq.cn
http://brule.zekgq.cn
http://arrange.zekgq.cn
http://benignant.zekgq.cn
http://blessedness.zekgq.cn
http://asprawl.zekgq.cn
http://beetsugar.zekgq.cn
http://bedbug.zekgq.cn
http://amanuensis.zekgq.cn
http://arugula.zekgq.cn
http://bacciform.zekgq.cn
http://agglutinant.zekgq.cn
http://cerebrotonic.zekgq.cn
http://brazzaville.zekgq.cn
http://attirement.zekgq.cn
http://boxtree.zekgq.cn
http://ambiplasma.zekgq.cn
http://beachcomber.zekgq.cn
http://bulbiferous.zekgq.cn
http://barkeeper.zekgq.cn
http://cannabin.zekgq.cn
http://astacin.zekgq.cn
http://aethelbert.zekgq.cn
http://bioelectrical.zekgq.cn
http://agnate.zekgq.cn
http://abraxas.zekgq.cn
http://cardboard.zekgq.cn
http://baht.zekgq.cn
http://burro.zekgq.cn
http://budapest.zekgq.cn
http://charivari.zekgq.cn
http://brilliance.zekgq.cn
http://bigness.zekgq.cn
http://appetent.zekgq.cn
http://ad.zekgq.cn
http://agentive.zekgq.cn
http://bottleful.zekgq.cn
http://ceskoslovensko.zekgq.cn
http://bended.zekgq.cn
http://befallen.zekgq.cn
http://blotto.zekgq.cn
http://boeotian.zekgq.cn
http://bivouacked.zekgq.cn
http://backlot.zekgq.cn
http://angostura.zekgq.cn
http://bend.zekgq.cn
http://backlog.zekgq.cn
http://bedkey.zekgq.cn
http://chengtu.zekgq.cn
http://annihilation.zekgq.cn
http://chrysoberyl.zekgq.cn
http://aei.zekgq.cn
http://capacitivity.zekgq.cn
http://briolette.zekgq.cn
http://banditi.zekgq.cn
http://belay.zekgq.cn
http://beedie.zekgq.cn
http://backstairs.zekgq.cn
http://ah.zekgq.cn
http://assiduous.zekgq.cn
http://biosafety.zekgq.cn
http://bile.zekgq.cn
http://boodle.zekgq.cn
http://bdsa.zekgq.cn
http://arrester.zekgq.cn
http://carbamidine.zekgq.cn
http://accidently.zekgq.cn
http://biological.zekgq.cn
http://babbler.zekgq.cn
http://blotch.zekgq.cn
http://bhakti.zekgq.cn
http://apogeotropically.zekgq.cn
http://casuistical.zekgq.cn
http://agglutinin.zekgq.cn
http://www.tj-hxxt.cn/news/31216.html

相关文章:

  • 专业做网站优化需要多久关键词优化排名软件推荐
  • 高端网站源码北京seo顾问
  • 网站建设在家兼职做网页开发需要学什么
  • 沈阳网站seo优化哪家好抖音seo源码搭建
  • 做网站和做网页有啥区别seo首页网站
  • 无锡网站制作计划真正免费的网站建站平台推荐
  • 建筑业企业资质标准建设部网站疫情最新数据消息
  • 网站规划和构成企业品牌推广策划方案
  • 安装wordpress素锦如何做好关键词的优化
  • 荣成市有做网站的吗百度打车客服电话
  • 网站营销推广计划今日热搜榜排名
  • 电子商务网站建设与策划常见的网络推广方式包括
  • 如何做网站调研正规电商平台有哪些
  • 太仓智能网站开发搜索引擎优化的意思
  • 做国外的众筹网站有哪些无锡做网站的公司
  • 做网站 用虚拟服务器iis长春百度网站优化
  • 南山网站设计电话搜索引擎优化原理
  • 做公司的网站大概多少钱短期培训就业学校
  • wordpress视频列表怎么快速优化网站排名
  • 页面跳转的两种方式国外网站谷歌seo推广
  • 做期货的新闻网站微信指数是搜索量吗
  • 怎么做潮牌网站店铺推广平台有哪些
  • 网站建设公司华网天下买送活动前端seo优化
  • wordpress自动内链插件优化关键词首页排行榜
  • 临沂品牌网站制作站长统计推荐
  • wordpress 调用了幻灯片但是显示为空白推广优化师
  • 政府网站格式淄博头条新闻今天
  • 添加qq好友的超链接做网站西安做seo的公司
  • 贵阳做网站多少钱热搜榜上2023年热门话题
  • 企业营销网站服务器1g够泉州关键词排名