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

做包装盒子的厂家哪个网站温州营销网站制作报价

做包装盒子的厂家哪个网站,温州营销网站制作报价,工作准备区域的组成包括,做企业网站的好处通过将自己注入自己#xff0c;使用代理对象调用add方法解决了事务失效问题#xff0c;但是这样不会产生循环依赖吗#xff1f; 在OrdersCreateServiceImpl 中注入的是OrdersCreateServiceImpl 的代理对象#xff0c;并不是OrdersCreateServiceImpl 本身实例#xff0c;构…通过将自己注入自己使用代理对象调用add方法解决了事务失效问题但是这样不会产生循环依赖吗 在OrdersCreateServiceImpl 中注入的是OrdersCreateServiceImpl 的代理对象并不是OrdersCreateServiceImpl 本身实例构不成循环依赖。即使向OrdersCreateServiceImpl 注入的是本身实例也不会报错Spring通过三级缓存解决循环依赖会先向成员变量注入一个半成品实例而后再完成初始化。 Spring通过三级缓存对Bean延迟初始化解决循环依赖。 具体如下 singletonObjects缓存这是 Spring 容器用来缓存完全初始化好的单例 bean 实例的缓存。 earlySingletonObjects缓存这个缓存是用来保存被实例化但还未完全初始化的 bean 半成品的引用。 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 A 和 B它们通过属性互相依赖即 A 依赖 BB 依赖 A。Spring 通过以下步骤解决这种循环依赖 2.1 实例化 Bean A Spring 首先实例化 Bean A构造方法调用但还没有进行属性注入和初始化操作。在此时Spring 会将 A 的早期引用放入 三级缓存 singletonFactories 中。 2.2 实例化 Bean B 当 Spring 尝试实例化 A 时发现 A 依赖于 B于是开始实例化 B。Spring 同样会把 B 的早期引用放入三级缓存并开始初始化它。 2.3 解决 Bean A 的依赖 在填充 B 的依赖时发现 B 需要 A此时 Spring 发现 A 的实例还未完全初始化但 A 已经存在于三级缓存中。Spring 从 三级缓存 中获取 A 的早期引用这个引用还没有完全初始化只是一个代理或者半成品对象并注入到 B 中。 2.4 完成初始化 现在 B 已经实例化并注入了 A然后继续完成 B 的剩余初始化比如调用 PostConstruct 或者初始化方法。B 完全初始化后Spring 将 B 的实例放入 一级缓存 中并从 二级缓存 和 三级缓存 中移除。接着Spring 回到 A现在 B 已经完全初始化并注入到了 A 中A 可以继续完成自己的初始化。最终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://www.hkea.cn/news/14500571/

相关文章:

  • 广西代理网站建设公司wordpress en
  • 营销型科技网站建设珠海教育局系统网站
  • 单页面网站好优化吗我想开一家网店怎么开
  • 网站改标题不改版 k个人网站制作网站
  • 做媛网站国内包装设计网站
  • 建设门户网站发展前景2018营销网站建设内容
  • 国家工信部网站备案查询系统做网站怎么写代码
  • 固定ip如何做网站服务器WordPress获取评论内容
  • 肃宁县网站建设公司html5 手机 网站
  • 机械行业网站有哪些果业局网站建设
  • 建设了网站怎么管理企业营销网站模板
  • wordpress如何导航网站模板西安网站建设聂卫
  • 包站长ppt网站如何确定一个网站的关键词
  • 单页导航网站WordPress不显示斜杠
  • 专注网站建设怎么样wordpress加载过慢
  • 做pc端网站咨询西充县住房和城乡建设局网站
  • 企业高端网站建设公司罗湖中心区做网站
  • 签约做网站模板网页设计与网站建设期末考试试卷
  • 建设银行网站一直打不开网站公司打电话来说做网站
  • 沈阳做网站多少钱wordpress精简优化
  • 福建高端建设网站做网推的网站
  • php网站搭建下载小程序
  • 最常用的网站开发工具如何搭建自己的网站服务器地址
  • 给做网站建设的一些建议毕业季网站如何做网页
  • 北京网站公司制作百度 排名seo快速
  • 大图网 网站百度一下首页网址百度
  • 2022建站市场个人网站建设月租抵30元
  • 自建外贸网站沈阳做网站公司
  • 网站建设说课ppt文化类网站的前置审批
  • 做一张网站图多少钱建设银行网站首页是多少