Core - IOC
控制反轉, IOC
原名: Inversion of Control,Spring 的核心容器,實作了 IOC 的概念,又稱作 IOC Container。
何謂控制?
bean 的創建、管理的權利,控制 bean 的整個生命周期。
何謂反轉?
把權利交給了 Spring 容器,而不是自己去控制。
Example:
一般情況下 -> 在 A 類別使用 B 類別時,必須先在 A 類別實例化 B 類別的對象。
而使用了 Spring 的 IoC 容器之後,可以通過它的配置文件(applicationContext.xml),
向 A 類別注入 B 類別的對象,這樣在 A 類別中就不需要實例化 B 類別對象而可以直接使用。
優點:
IOC 容器可以通過配置文件來確定需要注入的實例化對象,因此非常便於進行單元測試。
物件角度,可以避免物件之間的耦合 ; 容器角度,避免應用依賴容器功能,造成脫離困難。
通過IOC容器,開發人員不需要關注對像是如何創建的,同時增加新類別也非常方便,只需要修改配置文件即可實現對象的熱插拔。
缺點:
對象是通過反射機制實例化出來的,因此對系統的性能有一定的影響。
創建對象的流程變得複雜。
透過 依賴注入 , DI (Dependency Injection),保留抽象介面,讓 組件(Component)依賴於抽象介面,當發生依賴關係時,藉由抽象介面來注入依賴的實際物件。
何謂依賴?
運行時需要依賴外部的資源,提供程式內對象的所需要的資源。
何謂注入?
配置文件把資源從外部注入到內部,容器加載了外部的文件、對象、資源,
然後把這些資源注入給程式內的對象,維護了程式內外對象之間的依賴關係。
注入方式
建構子注入
Setter 注入
沒有部份注入( 完全依賴 )
有部分注入( 部分依賴 )
不會覆蓋 setter 屬性
會覆蓋 setter 屬性
任意修改都會創建實例
任意修改不會創建實例
適用於設置多屬性
適用於設置較少屬性
思考:why constructor Injection better than field Injection?
參考資料
Last updated
Was this helpful?