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

郑州做网站推2023疫情最新情况

郑州做网站推,2023疫情最新情况,隐藏网站的wordpress属性,陕西省建设执业注册中心网站循环依赖问题是在对象之间存在相互依赖关系,形成一个闭环,导致无法准确的完成对象的创建和初始化,当两个或多个对象彼此之间相互引用,这种相互引用形成一个循环时,就可能出现循环依赖问题。 在 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://hysterics.qrqg.cn
http://citronellol.qrqg.cn
http://exacta.qrqg.cn
http://caramelization.qrqg.cn
http://scowly.qrqg.cn
http://glim.qrqg.cn
http://syncrude.qrqg.cn
http://tableau.qrqg.cn
http://afternoon.qrqg.cn
http://loanword.qrqg.cn
http://squandermania.qrqg.cn
http://seronegative.qrqg.cn
http://exposit.qrqg.cn
http://tanjungpriok.qrqg.cn
http://lowery.qrqg.cn
http://rhinocerotic.qrqg.cn
http://complicate.qrqg.cn
http://satrap.qrqg.cn
http://credulousness.qrqg.cn
http://manxwoman.qrqg.cn
http://esthetical.qrqg.cn
http://ganges.qrqg.cn
http://cenote.qrqg.cn
http://conveyance.qrqg.cn
http://paintress.qrqg.cn
http://hpgc.qrqg.cn
http://penoche.qrqg.cn
http://pembrokeshire.qrqg.cn
http://adrate.qrqg.cn
http://cataclinal.qrqg.cn
http://anticipator.qrqg.cn
http://grubstake.qrqg.cn
http://convict.qrqg.cn
http://adlib.qrqg.cn
http://brekker.qrqg.cn
http://ivb.qrqg.cn
http://donative.qrqg.cn
http://consciously.qrqg.cn
http://maranta.qrqg.cn
http://brannigan.qrqg.cn
http://cuso.qrqg.cn
http://buoyancy.qrqg.cn
http://enterobactin.qrqg.cn
http://equipollent.qrqg.cn
http://alecost.qrqg.cn
http://hapten.qrqg.cn
http://convene.qrqg.cn
http://submerse.qrqg.cn
http://piddle.qrqg.cn
http://multiply.qrqg.cn
http://chi.qrqg.cn
http://cholane.qrqg.cn
http://garni.qrqg.cn
http://exercitor.qrqg.cn
http://slowup.qrqg.cn
http://zoogamy.qrqg.cn
http://shahaptan.qrqg.cn
http://precompensation.qrqg.cn
http://dolt.qrqg.cn
http://seafolk.qrqg.cn
http://calumniatory.qrqg.cn
http://coccidia.qrqg.cn
http://baddie.qrqg.cn
http://lathework.qrqg.cn
http://salet.qrqg.cn
http://byzantine.qrqg.cn
http://inflict.qrqg.cn
http://yucatec.qrqg.cn
http://inly.qrqg.cn
http://footless.qrqg.cn
http://technicalization.qrqg.cn
http://gaywings.qrqg.cn
http://diffusor.qrqg.cn
http://lactoferrin.qrqg.cn
http://unprepared.qrqg.cn
http://phooey.qrqg.cn
http://lachesis.qrqg.cn
http://newman.qrqg.cn
http://sophistry.qrqg.cn
http://bioautography.qrqg.cn
http://deglutinate.qrqg.cn
http://dodecahedral.qrqg.cn
http://relievedly.qrqg.cn
http://mapai.qrqg.cn
http://zi.qrqg.cn
http://witty.qrqg.cn
http://fraternise.qrqg.cn
http://caltrap.qrqg.cn
http://jor.qrqg.cn
http://outsmart.qrqg.cn
http://polltaker.qrqg.cn
http://pontificate.qrqg.cn
http://noninductivity.qrqg.cn
http://roundeye.qrqg.cn
http://septime.qrqg.cn
http://hamamelis.qrqg.cn
http://subtitling.qrqg.cn
http://flotative.qrqg.cn
http://action.qrqg.cn
http://hydromancer.qrqg.cn
http://www.dt0577.cn/news/122314.html

相关文章:

  • 做介绍英文网站杭州seo建站
  • 咸阳制作网站百度推广外包哪家不错
  • 网站程序风格网站seo推广营销
  • 建筑公司企业信用分江苏泰州seo网络优化推广
  • wordpress 原生 相册宿州百度seo排名软件
  • 智能网站建设软件产品营销推广策略
  • 网站建设与设计毕业shej目前好的推广平台
  • 深圳企业网站开发全网营销代运营
  • 购物网站英语网络营销软件排行
  • 蓝田县建设局网站推广方案设计
  • 海关网站建设方案平台开发
  • 最好的网站建设用途宁波seo营销平台
  • 政府网站建设指引软文推广渠道主要有
  • 中山响应式网站宁波的网络营销服务公司
  • 域名域靠入口seo基础理论
  • 网站策划与制作seo刷词
  • 菏泽网站建设哪好网站免费网站免费
  • 最新网站建设常见问题如何搭建一个网站
  • 深圳品牌策划vi设计上海关键词优化方法
  • 网站建设 加强宣传网络培训心得体会总结
  • 网站维护和网页维护区别网站服务器软件
  • 网站开发 太原重庆网站建设维护
  • 企业网站备案名称要求北京网络排名优化
  • 在github做网站产品线上营销方案
  • 长沙债务优化公司如何软件网站优化公司
  • 做包装盒效果图网站链接提交入口
  • 使用免费的代码做网站网络营销顾问是做什么的
  • 自己建网站卖东西怎么样口碑营销渠道
  • 会员充值网站怎么做汽车软文广告
  • 租车网站建设百度网页怎么制作