当前位置: 首页 > 网络应用技术

春季循环依赖性

时间:2023-03-06 11:01:34 网络应用技术

  SO称为循环依赖性指的是,A取决于B,B依靠A,它们之间形成了它们之间的圆形依赖性。或a取决于B,B,B,b依赖于C,C取决于A。以下内容:

  弹簧容器的最大功能是管理Bean的生命周期。在创建每个Bean期间,需要为Bean的所有属性分配一个完整的豆。如果两个豆子具有相同的依赖性,则如果弹簧不处理周期依赖性,则结果的结果是,它在创建豆期间似乎是相互依赖的,这使得该豆永远不会创造创建。最终结果是堆栈溢出是异常的,那是堆栈溢出类似于递归的溢出。春季创建bean时,该过程如下:

  春季的豆类将在创建豆类的过程中涉及几套

  第一个级别的缓存:第一个级别的缓存是我们经常称为Spring的单个情况容器。弹簧对注入豆的依赖是从这个单箱池中获得的。Creationwe之后,我们将其称为第一个级别的缓存;第二个级别的缓存:第二个级别的缓存可以从称为早期单身对象的名称中知道,也就是说,它存储在早期的单个情况下,这可能是不完整的;第三级是第三级; ccheca:它存储在我们实例化的原始对象中,这是刚刚创建的原始对象。

  首先,我们的一个对象之一将在创建并删除辅助缓存后将其放置在第三级高速缓存中。第三级高速缓存存储了与BeanName相对应的Lambad表达式。相应的BeanDefining和BeanName封装在对象文件中,因此目前,它只是存储在第三级高速缓存中的lambad表达式。当使用objectFactory的getObject执行lambad表达式时,即该方法的方法;

  如果整个过程中没有循环依赖性,则永远不会使用辅助缓存,而第三级高速缓存仅存储实例化包装的对象,并且不会使用;当这次的循环依赖性时,将启用第二和第三级缓存。首先,该对象被从第三个缓存中取出,然后执行getObject。类缓存,然后删除第三级缓存;

  您可以在这里获得一个知识,即辅助缓存和第三级高速缓存存在一对。在缓存,删除第三级缓存并保存第三级高速缓存,删除次级缓存。

  上面的两个豆是相互依赖的,即循环依赖性。加入Spring First扫描Asservice。然后,保管过程如下:Asservice创建过程:

  BService创建过程:

  创建了Asservice时,创建了Bservice,并发现已经创建了Bservice。由于创建助理时出现了周期依赖性,因此已经创建了Bservice,因此处理完成。

  弹簧需要三个缓存和两个级别的缓存来存储原始对象,而第三级缓存是AOP或更改后更改后可用的对象。我们正在谈论的是保安和bservice。

  而助理,bservice和cservice都是单个情况,也就是说,所有三种豆只能存在,只能实例化一次。

  第三级高速缓存将在实例化后存储原始对象包装的对象。如果循环依赖性对象打开AOP,则目前还没有第三级缓存,那么您是否必须在每次第三级缓存中取出原始对象?对于AOP,那么第一个级别的缓存不是相同的,并且将被覆盖,因此将涵盖上一个值的对象。对于更完整的对象,第三级是刚刚实例化的对象。第三,将放入的对象缓存是从第二个缓存获得的。您可以将第三个和继发于刚出生的孩子和准备去社会的成年人进行比较,但它们都是相同的对象。即使他们这样做,他们也完成了。

  周期依赖性的一般过程: