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

在春季豆周期依赖性和解决方案的深度分析中

时间:2023-03-07 19:11:45 网络应用技术

  Java的循环依赖性

  例如,以下有两个类别

  对象A需要B对象,并且彼此需要a对象,彼此需要,因此称为圆形依赖关系

  为了创建上面提到的周期依赖性,您可以做到这一点

  核心想法是,首先制度化,然后设置依赖性

  如上所示,这是运行的结果。为了更好地促进每个人理解该周期依赖性对象的创建过程,我画了一张图片

  代码中的A中有b,而b为a,反映在堆中。实际上,在@491中有一个对b@492的引用,并且在b@492中也提到了@491

  这样,我们创建了循环依赖的对象

  如果无法先实例化周期依赖项的对象,然后设置,则该循环依赖性无法解决!

  例如,A和B通过构造函数设置依赖项

  实例化时,此循环依赖性需要依赖对象,并且依赖对象在实例化时需要自己,因此该周期依赖性未解决!

  换句话说,并非所有周期依赖性都可以解决!

  春季解决了对循环依赖性的相同思考。它与上述相同。相似,无法解决由构造函数引起的循环依赖性!

  条件1:依赖注射方法!

  在春季,有三种依赖注射的方法

  有关春季依赖性的详细信息,请参阅春季依赖注入

  上面还提到了基于构造方法的第一类依赖注入。如果产生了循环依赖性问题,则无法解决。如果生成其他两种类型的循环依赖性,则可以先通过第一实例化,然后可以求解依赖项来求解依赖关系。

  条件第二:Bean的范围

  有关Bean范围的详细信息,请参阅Spring Bean范围

  在春季,Bean的范围将直接影响Bean的创造行为,而创建行为决定了它是否可以解决循环依赖性问题。在Bean的5个范围中,只有Singleton范围的创建。当发生周期依赖性时,弹簧框架可以自动帮助您解决,只要它符合条件一个

  当一个周期依靠时,弹簧框架可以自动解决我们,但是有两个先决条件

  由于只有当Singleton范围和BEAN的创建才能解决BEAN的循环依赖性时,我们才必须了解创建Bean的过程是更多的内容。我写了一篇单独的文章,并参考了Spring Singleton Beancycle的生活

  我们A和B是两个类别,它们相互依赖

  为了解决循环依赖性,有必要使用成员变量或方法来注入依赖关系。春季不建议使用基于成员变量的方法注入依赖项。可以自动组装,效果是相同的

  现在,我们结合了Spring Singleton Bean的生命周期的过程,以列出春季如何解决这个周期依赖性

  假设Spring会创建A,Singleton的范围,当创建Bean时,它将被调用,首先是从缓存中获得的。

  以上是A和B没有由AOP代表。如果代表它们,它们实际上是相似的。唯一的区别是,获取Bean Factory的不是第三个缓存中的原始BEAN对象。代理对象相同。

  作者:我的妻子Liyi的版权属于作者。

猜你喜欢