spring中的循环依赖的实现

        之前在学习spring的时候对循环依赖这方面有一些疏忽,今天下午对此进行了学习,就将自己的理解记录下来。

1.什么叫循环依赖

比如A依赖B,B依赖C,C依赖于A,这样就构成了循环依赖

2.spring是如何实现循环依赖的呢,下面我分为两个方面来进行说明。一是,构造依赖,二是,属性依赖

        我们新建三个类,A,B,C,A的有参构造是B,B的有参构造是C,C的有参构造是A。这样就形成了他们的循环依赖关系。

那么接下来进行bean的配置

   1》构造依赖,用有参构造实例化,代码截图如下

spring中的循环依赖的实现_第1张图片

但是这样其实是会抛出BeanCurrentlyInCreationException异常的,因为Spring容器先创建单例StudentA,StudentA依赖StudentB,然后将A放在“当前创建Bean池”中,此时创建StudentB,StudentB依赖StudentC ,然后将B放在“当前创建Bean池”,此时创建StudentC,StudentC又依赖StudentA, 但是,此时Student已经在池中。

2》属性依赖,setter注入,Spring是先将Bean对象实例化之后再设置对象属性的,代码如下

spring中的循环依赖的实现_第2张图片

Spring会将这个实例化结束的对象放到一个Map中,未设置属性,然后再获取实例化对象引用



你可能感兴趣的:(spring中的循环依赖的实现)