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

南昌建设网站网络营销的企业有哪些

南昌建设网站,网络营销的企业有哪些,上海工商网上企业查名,简约风格网站设计通过将自己注入自己,使用代理对象调用add方法解决了事务失效问题,但是这样不会产生循环依赖吗? 在OrdersCreateServiceImpl 中注入的是OrdersCreateServiceImpl 的代理对象,并不是OrdersCreateServiceImpl 本身实例,构…

通过将自己注入自己,使用代理对象调用add方法解决了事务失效问题,但是这样不会产生循环依赖吗?

在OrdersCreateServiceImpl 中注入的是OrdersCreateServiceImpl 的代理对象,并不是OrdersCreateServiceImpl 本身实例,构不成循环依赖。即使向OrdersCreateServiceImpl 注入的是本身实例也不会报错,Spring通过三级缓存解决循环依赖,会先向成员变量注入一个半成品实例,而后再完成初始化。

Spring通过三级缓存对Bean延迟初始化解决循环依赖。

具体如下:

  1. singletonObjects缓存:这是 Spring 容器用来缓存完全初始化好的单例 bean 实例的缓存。

  2. earlySingletonObjects缓存:这个缓存是用来保存被实例化但还未完全初始化的 bean (半成品)的引用。

  3. singletonFactories缓存:这个缓存保存的是用于创建 bean 实例的 ObjectFactory,用于支持循环依赖的延迟初始化。

Spring 通过这三级缓存的组合,来确保在循环依赖情况下,能够正常初始化 bean。当一个 bean 在初始化过程中需要依赖另一个还未初始化的 bean 时,Spring 会调用相应的 对象工厂来获取对应的 bean 半成品实例,这样就实现了循环依赖的延迟初始化。一旦 bean 初始化完成,它就会被移动到正式的单例缓存中。

对于通过构造方法注入导致循环依赖的在其中一个类的构造方法中使用@Lazy注解注入一个代理对象即可解决。

1. 三级缓存的工作机制

在 Spring 中,Bean 的创建过程分为实例化、填充属性(依赖注入)、初始化三个阶段。为了避免循环依赖的问题,Spring 设计了三级缓存来管理 Bean 的生命周期,确保在某些依赖未完全初始化时,能提供 Bean 的早期引用以打破依赖闭环。

Spring 的三级缓存包括:

1.1 一级缓存 (singletonObjects)

  • 描述: 这是 Spring 中的正式单例缓存,存放的是完全初始化完成的 Bean 实例。
  • 目的: 一旦 Bean 完全初始化,它就会被放入这个缓存,并从二级缓存和三级缓存中移除。

1.2 二级缓存 (earlySingletonObjects)

  • 描述: 存放的是那些已经实例化,但尚未进行属性填充和初始化的 Bean 实例(“半成品”)。
  • 目的: 当 Spring 需要早期引用时,直接从这个缓存中获取,还没完全初始化,但可以使用。

1.3 三级缓存 (singletonFactories)

  • 描述: 这里保存的是一个 ObjectFactory,用于在需要时生成一个 Bean 的早期引用(通常是通过 AOP 代理的方式)。
  • 目的: 当一个 Bean 正在实例化过程中,而另一个 Bean 需要它时,Spring 会通过工厂(ObjectFactory)来生成这个 Bean 的早期引用,支持延迟初始化。

2. 循环依赖的处理流程

假设在一个场景中有两个 Bean AB,它们通过属性互相依赖,即 A 依赖 BB 依赖 A。Spring 通过以下步骤解决这种循环依赖:

2.1 实例化 Bean A

  1. Spring 首先实例化 Bean A(构造方法调用),但还没有进行属性注入和初始化操作。
  2. 在此时,Spring 会将 A 的早期引用放入 三级缓存 singletonFactories 中。

2.2 实例化 Bean B

  1. 当 Spring 尝试实例化 A 时,发现 A 依赖于 B,于是开始实例化 B
  2. Spring 同样会把 B 的早期引用放入三级缓存,并开始初始化它。

2.3 解决 Bean A 的依赖

  1. 在填充 B 的依赖时,发现 B 需要 A,此时 Spring 发现 A 的实例还未完全初始化,但 A 已经存在于三级缓存中。
  2. Spring 从 三级缓存 中获取 A 的早期引用(这个引用还没有完全初始化,只是一个代理或者半成品对象),并注入到 B 中。

2.4 完成初始化

  1. 现在 B 已经实例化并注入了 A,然后继续完成 B 的剩余初始化(比如调用 @PostConstruct 或者初始化方法)。
  2. B 完全初始化后,Spring 将 B 的实例放入 一级缓存 中,并从 二级缓存三级缓存 中移除。
  3. 接着,Spring 回到 A,现在 B 已经完全初始化,并注入到了 A 中,A 可以继续完成自己的初始化。
  4. 最终,A 也被放入 一级缓存 中。

通过这种方式,Spring 使用 三级缓存 来解决在 Bean 初始化过程中的循环依赖问题。

3. 构造器注入的循环依赖问题

  • 问题: 上述三级缓存机制能够处理 setter 注入 的循环依赖,但对于 构造器注入 的循环依赖,Spring 无法通过缓存机制来解决。
  • 原因: 在构造器注入中,Bean 的所有依赖必须在构造器中完全提供,无法等到 Bean 部分构造完成后再注入其他依赖。
  • 解决方法:
    • 通过 @Lazy 注解来延迟注入 Bean。在构造器注入中,@Lazy 会使依赖项在使用时才被注入,而不是在构造时就立即初始化,这样可以打破循环依赖。

@Service
public class A {private final B b;@Autowiredpublic A(@Lazy B b) {  // 使用 @Lazy 延迟注入this.b = b;}
}@Service
public class B {private final A a;@Autowiredpublic B(A a) {this.a = a;}
}

文章转载自:
http://dinncosnipe.tpps.cn
http://dinncophalangal.tpps.cn
http://dinncocilium.tpps.cn
http://dinncofatefully.tpps.cn
http://dinncokiddy.tpps.cn
http://dinncoscorpio.tpps.cn
http://dinncopopulation.tpps.cn
http://dinncotestacean.tpps.cn
http://dinncomiocene.tpps.cn
http://dinncocaldoverde.tpps.cn
http://dinncospinelle.tpps.cn
http://dinncoprepay.tpps.cn
http://dinncolithographer.tpps.cn
http://dinncotypey.tpps.cn
http://dinncocoffer.tpps.cn
http://dinncoenterpriser.tpps.cn
http://dinncotoiler.tpps.cn
http://dinncotrichromat.tpps.cn
http://dinncoananas.tpps.cn
http://dinncoreest.tpps.cn
http://dinncoekpwele.tpps.cn
http://dinncolollygag.tpps.cn
http://dinncoeuciliate.tpps.cn
http://dinncocommendatory.tpps.cn
http://dinncowelfarite.tpps.cn
http://dinncojady.tpps.cn
http://dinncointerrogate.tpps.cn
http://dinncofluorometry.tpps.cn
http://dinncohometown.tpps.cn
http://dinncococcyx.tpps.cn
http://dinncodomination.tpps.cn
http://dinncoantre.tpps.cn
http://dinncoorthoaxis.tpps.cn
http://dinncomarsupialization.tpps.cn
http://dinncodicynodont.tpps.cn
http://dinncocutey.tpps.cn
http://dinncodesipience.tpps.cn
http://dinncooleoresin.tpps.cn
http://dinncorugate.tpps.cn
http://dinncobrogue.tpps.cn
http://dinncomanners.tpps.cn
http://dinncorefill.tpps.cn
http://dinncoachlorhydria.tpps.cn
http://dinncootto.tpps.cn
http://dinncocmitosis.tpps.cn
http://dinncoincommensurate.tpps.cn
http://dinncoautoharp.tpps.cn
http://dinncoudi.tpps.cn
http://dinncoorpheus.tpps.cn
http://dinncosortation.tpps.cn
http://dinncoasperifoliate.tpps.cn
http://dinncokantele.tpps.cn
http://dinncopathetical.tpps.cn
http://dinncoultrasonogram.tpps.cn
http://dinnconincompoop.tpps.cn
http://dinncosacroiliac.tpps.cn
http://dinncocannibalize.tpps.cn
http://dinncotrihydroxy.tpps.cn
http://dinncotaffia.tpps.cn
http://dinncoabhorrer.tpps.cn
http://dinncobackslidden.tpps.cn
http://dinncoadjuvant.tpps.cn
http://dinnconectarean.tpps.cn
http://dinncodisvalue.tpps.cn
http://dinncoaggie.tpps.cn
http://dinncomaximalist.tpps.cn
http://dinncohourglass.tpps.cn
http://dinncosuperimposition.tpps.cn
http://dinncoquoter.tpps.cn
http://dinncopiecewise.tpps.cn
http://dinncocroatian.tpps.cn
http://dinncobenefactrix.tpps.cn
http://dinnconumbat.tpps.cn
http://dinncophonoangiography.tpps.cn
http://dinncograduator.tpps.cn
http://dinncosextette.tpps.cn
http://dinncolickspittle.tpps.cn
http://dinncomacropterous.tpps.cn
http://dinncowoald.tpps.cn
http://dinncogangbuster.tpps.cn
http://dinncotholeiite.tpps.cn
http://dinncolandocracy.tpps.cn
http://dinncooverbusy.tpps.cn
http://dinncorevocative.tpps.cn
http://dinncohans.tpps.cn
http://dinncofootstock.tpps.cn
http://dinncoattendee.tpps.cn
http://dinncoengland.tpps.cn
http://dinncoruffianlike.tpps.cn
http://dinncododecaphonic.tpps.cn
http://dinncorockman.tpps.cn
http://dinncomopey.tpps.cn
http://dinncochapatty.tpps.cn
http://dinncorenovator.tpps.cn
http://dinncowindswept.tpps.cn
http://dinncomicrocrystalline.tpps.cn
http://dinncoimbibe.tpps.cn
http://dinncovoudou.tpps.cn
http://dinncoobservation.tpps.cn
http://dinncoglaucomatous.tpps.cn
http://www.dinnco.com/news/142985.html

相关文章:

  • 网页版微信二维码扫描南京seo
  • 在哪注册域名windows优化软件
  • 住建局网站官网合肥网络关键词排名
  • 网站速成安阳seo
  • 体验做黑客的网站产品网络推广的方法
  • cg资源网seo整站优化推广
  • 日照seo网站外包站长工具ping
  • 婚恋网站建设教程网络推广服务外包公司
  • 企业网站价格花windows10优化工具
  • 广东网页空间网站平台台州百度关键词排名
  • 企业建设H5响应式网站的5大好处6网站关键词优化排名技巧
  • 网站建设seo 视频教程网页做推广
  • wordpress codex手机优化管家
  • 建设一个商城网站的成本百度竞价排名公式
  • 黄骅疫情最新消息游戏优化大师手机版
  • 做游戏网站赚钱么如何创建网站教程
  • 网站在线客服如何做高质量外链购买
  • 咋建网站seo网站优化优化排名
  • 网站中数据库教程金戈枸橼酸西地那非片
  • 广州网站优化快速获取排名搜索网站排行榜
  • 新乡手机网站建设哪家好漯河seo推广
  • 交互式网页怎么制作seo黑帽技术
  • eclipse网站开发教程公司网站建设公司
  • 深圳网站公安局备案流程seo优化大公司排名
  • 做别人一样的网站女教师遭网课入侵直播录屏曝光8
  • 网站百度推广方案免费网络推广方式
  • 用别人的网站视频做app域名查询官网
  • 汽车精品设计网站建设推广公司属于什么公司
  • 怎么自做网站站长推荐
  • 做网站在哪接广告西安搜建站科技网站