1. 程式人生 > >關於Spring中的[控制反轉]和[依賴注入]的深入理解

關於Spring中的[控制反轉]和[依賴注入]的深入理解

第一段說明

  • 對於一個Bean 來說,如果你依賴別的Bean , 只需要宣告即可, spring 容器負責把依賴的bean 給“注入進去“, 起初大家稱之為控制反轉(IoC)
  • 後來 Martin flower 給這種方式起來個更好的名字,叫“依賴注入”。
  • 如果一個Bean 需要一些像事務,日誌,安全這樣的通用的服務, 也是隻需要宣告即可, spring 容器在執行時能夠動態的“織入”這些服務, 這叫AOP。

第二段說明

  • 控制反轉(IoC=Inversion of Control)IoC,用白話來講,就是由容器控制程式之間的(依賴)關係,而非傳統實現中,由程式程式碼直接操控。這也就是所謂“控制反轉”的概念所在:(依賴)控制權由應用程式碼中轉到了外部容器,控制權的轉移,是所謂反轉。

  • 所謂依賴注入,即元件之間的依賴關係由容器在執行期決定,形象的來說,即由容器動態的將某種依賴關係注入到元件之中。

  • 正在業界為IoC爭吵不休時,大師級人物Martin Fowler也站出來發話,以一篇經典文章《Inversion of Control Containers and the Dependency Injection pattern》為IoC正名,至此,IoC又獲得了一個新的名字:“依賴注入(Dependency Injection)”。

從上面的兩段說明文字可以看出:
其實所謂的Ioc和DI,是說的同一件事,強調的內容不同而已。

  • IoC控制反轉,強調容器的作用,用於組織或控制容器內bean的執行。
  • DI依賴注入,強調Bean需要外部注入才能正常運轉。相對地說做容器框架的(比如Spring)當然強調控制了,怎麼更好的控制別的Bean的執行,相反做模組的,當然強調注入了,我到底需要依賴注入什麼。

寫給自己:自己剛剛接觸Spring,對於上面的兩個概念還不是很清晰,以作總結。