Spring 迴圈引用(三)原始碼深入分析版
阿新 • • 發佈:2020-05-11
@[TOC]( 迴圈引用原始碼分析)
# 前言
關於Spring 迴圈引用 網上的分析文章很多,寫的水平良莠不齊,雖然看完了 知道怎麼個回事 但是過段時間還是忘記了,主要本人沒過目不忘的本領哈,但是隻要記住主要的點就好了
但是如果你自己想更深入的瞭解,還是要自己去看原始碼分析一波,因為別人分析的時候,有些知識點你是get不到的,只有當自己走進原始碼去看的時候,才有get到更多的!比如網上很多文章都分析Springs是怎麼解決迴圈依賴的 但是為什麼只有單類的才可以,Prototype的就不行呢,在哪裡不行,或者說構造器的注入為什麼也不可以,最後如果解決迴圈依賴,或者說 怎麼去換中寫法去解決問題。
==紙上得來終覺淺 絕知此事要躬行!== 這句話獻給正在讀文章的你,看完記得點贊,還有就是自己去下載Spring 原始碼 去看看
# 正文
OK,進入正文,當然上面也不是廢話啦,Spring 的迴圈引用 我想讀者們應該知道,不知道的話,算了 來個code把!
```java
@Component
public class CycleTestServiceA {
private CycleTestServiceB b;
public void setB(CycleTestServiceB b) {
this.b = b;
}
}
@Component
public class CycleTestServiceB {
private CycleTestServiceA a;
public void setA(CycleTestServiceA a) {
this.a = a;
}
}
```
上面的 程式碼 就是一個普通的set注入的方式,A裡面依賴B,B裡面依賴A,這樣就導致了迴圈依賴,Component預設是Singleton的
# 分析
我們從Spring Beanc建立開始作為入口,在Spring IoC 容器中一個完整的Bean 要進過例項化 和初始化的階段
Spring Bean 例項化就getBean的過程
那我們接進入原始碼去看下getBean的過程
## doGetBean
getBean方法時 BeanFactory 介面的方法 他的實現類有很多,我們跟進去他的抽象實現類org/springframework/beans/factory/support/AbstractBeanFactory.java 類,其實都是呼叫了doGetBean方法
下面是我擷取的核心程式碼
```java
pr