學(xué)習(xí)Spring IOC,看完這篇就夠了

學(xué)習(xí)Spring IOC,看完這篇就夠了

說明

官網(wǎng)

介紹了控制反轉(zhuǎn)(IOC)原理的Spring框架實(shí)現(xiàn)。IoC也稱為依賴注入(DI)。在此過程中,對象僅通過構(gòu)造函數(shù)參數(shù),工廠方法的參數(shù)或在構(gòu)造或從工廠方法返回后在對象實(shí)例上設(shè)置的屬性來定義其依賴項(xiàng)(即,與它們一起使用的其他對象) 。然后,容器在創(chuàng)建bean時(shí)注入那些依賴項(xiàng)。此過程從根本上講是通過使用類的直接構(gòu)造或諸如服務(wù)定位器模式之類的機(jī)制來控制其依賴項(xiàng)的實(shí)例化或位置的bean本身的逆過程(因此稱為Control Inversion)。說完IOC的基本概念,就不能離開IOC所管理的對象——Bean進(jìn)行討論了。

image.png

這個(gè)圖很形象的說明獲得依賴對象的過程被反轉(zhuǎn)了。

Bean 定義

  • Id
  • Class
  • Scope
  • Constructor arguments
  • Properties
  • Autowiring mode
  • lazy-initialization mode
  • initialization/destruction method
  • Id和Class這里不做解釋說明,必須得保證項(xiàng)目內(nèi)唯一,不然啟動(dòng)會報(bào)出。

  • Scope 作用域

    1. singleton:單例,指一個(gè)Bean容器中只存在一份。默認(rèn)情況都是單例模式。針對此情況可以進(jìn)行池化管理封裝,達(dá)到快速響應(yīng)。

    池化的目的是提升對象復(fù)用率和定制化封裝,適用于10w級以上的并發(fā)請求。

  1. prototype:多例,每次從容器中獲取的對象都是新的。單例和多例可以根據(jù)對象的哈希值【haseCode】查看。通過注解形式注入的對象,都是單例。

  2. request:每次http請求創(chuàng)建一個(gè)實(shí)例僅在當(dāng)前request內(nèi)有效

  3. session、global session:同上

  • Constructor arguments 構(gòu)造器注入

  • Properties 設(shè)值注入

  • Autowiring mode 自動(dòng)裝配模式

Bean 生命周期

  • 初始化
  • 賦值
  • 調(diào)用
  • 銷毀

這里引申出問題一:相互依賴的Bean是如何進(jìn)行初始化的?

image.png

如果沒有處理好,會拋出循環(huán)依賴的問題。

image.png

Bean在實(shí)例化過程中,需要調(diào)用自身的構(gòu)造器進(jìn)行初始化,然后對成員變量進(jìn)行賦值。

成員變量賦值有兩種形式

    1. 構(gòu)造器注入
    2. 設(shè)值注入(我們常用的通過Set方法注入)

對于相互依賴的Bean進(jìn)行實(shí)例化的話,就不能通過構(gòu)造器注入。

問題二:如何保證Bean在整個(gè)容器是唯一的

這里使用到了單例模式中的雙重鎖模式

Bean 裝配

分為自動(dòng)轉(zhuǎn)配和手動(dòng)裝配

通過使用注解或是XML的形式進(jìn)行裝配

這里不做過多的闡述

說點(diǎn)和面試相關(guān)

除了向面試官闡述大家都知道的依賴注入和控制反轉(zhuǎn),你還可以說下和Bean相關(guān)的知識點(diǎn)。和IOC所相關(guān)的是Bean,包括以下幾個(gè)知識點(diǎn),感興趣的可以看下源碼或是官網(wǎng)

  • Bean 定義
  • Bean 生命周期
  • Bean 裝配

還可以引申出

  • Bean 池化處理
  • Bean 創(chuàng)建過程
  • Bean 相互依賴
  • 容器的三級緩存
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容