1. 程式人生 > >Spring 迴圈引用(三)原始碼深入分析版

Spring 迴圈引用(三)原始碼深入分析版

@[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