Spring IOC知識點總結

廣義的 IOC

在這以前,咱們先記住一句話。好萊塢原則:Don’t call me, we will call you. 即「不用打電話過來,咱們會打給你」。編程

控制反轉(Inversion of Control,簡稱IoC),是面向對象編程中的一種設計原則,能夠用來減低計算機代碼之間的耦合度。其中最多見的方式叫作依賴注入(Dependency Injection,簡稱DI),還有一種方式叫「依賴查找」(Dependency Lookup)。經過控制反轉,對象在被建立的時候,由一個調控系統內全部對象的外界實體,將其所依賴的對象的引用傳遞(注入)給它。segmentfault

兩種實現: 依賴查找(DL)和依賴注入(DI)。緩存

IOC 和 DI 、DL 的關係:spa

image

  • DI(Dependency Injection) 是 Spring 使用的方式,容器負責組件的裝配。
  • DL(Dependency Lookup)已經被拋棄。

IOC容器的原理

IOC容器其實就是一個大工廠,它用來管理咱們全部的對象以及依賴關係。設計

  • 原理就是經過Java的反射技術來實現的!經過反射咱們能夠獲取類的全部信息(成員變量、類名等等等)!
  • 再經過配置文件(xml)或者註解來描述類與類之間的關係
  • 咱們就能夠經過這些配置信息和反射技術來構建出對應的對象和依賴關係了!

咱們簡單來看看實際Spring IOC容器是怎麼實現對象的建立和依賴的:code

  1. 根據Bean配置信息在容器內部建立Bean定義註冊表
  2. 根據註冊表加載、實例化bean、創建Bean與Bean之間的依賴關係
  3. 將這些準備就緒的Bean放到Map緩存池中,等待應用程序調用

Spring容器(Bean工廠)可簡單分紅兩種xml

  • BeanFactory對象

    • 這是最基礎、面向Spring的
  • ApplicationContextblog

    • ApplicationContext是BeanFactory的子類
沒有特殊要求的狀況下,應該使用ApplicationContext完成。由於BeanFactory能完成的事情,ApplicationContext都能完成,而且提供了更多接近如今開發的功能。

對IOC的理解

首先,IOC控制反轉 生命週期

誰控制誰,控制什麼,什麼是反轉(有反轉就應該有正轉了)

誰控制誰,控制什麼

  • 在以前,沒有IOC時,咱們直接在對象內部經過new進行建立對象,是程序主動去建立依賴對象;
  • 而如今,是由IOC專門一個容器來建立這些對象,即由Ioc容器來控制對 象的建立;
  • 誰控制誰?固然是IOC容器控制了對象;控制什麼?那就是主要控制了外部資源獲取(不僅是對象還包括好比文件等)。

所謂反轉

  • 有反轉就應該有正轉,傳統應用程序是由咱們本身在對象中主動控制去直接獲取依賴對象,也就是正轉;
  • 而所謂的反轉,實際上是反轉的控制權,由 Spring 來控制對象的生命週期,那麼對象的控制就徹底脫離了咱們的控制,控制權交給了Spring 。這個反轉是指:咱們由對象的控制者變成了 IOC 的被動控制者。

其次,說到IOC就會想到DI 依賴注入(IOC 是經過DI來實現的),那麼:

誰依賴誰,爲何須要依賴;誰注入誰,注入了什麼

  • 誰依賴誰:A對象 依賴於 IOC 容器。
  • 爲何須要依賴:A對象須要 IOC 容器提供對象須要的數據、B對象 等外部資源,沒有這些資源不能完成業務處理。
  • 誰注入誰:IOC 容器注入 A對象。
  • 注入了什麼:IOC 容器將 A對象 須要的數據、B對象等外部資源按需注入給對象。

好處: 下降了開發的成本,提升了代碼複用率、軟件的靈活性。

總結

IOC:不是什麼技術,而是一種設計思想。在 Spring 開發中,由 IOC 容器控制對象的建立、初始化、銷燬等。這也就實現了對象控制權的反轉,由咱們對對象的控制轉變成了Spring IOC 對對象的控制

DI:是 IOC 的具體實現。程序把依賴交給容器,容器幫你管理依賴。

相關文章
相關標籤/搜索