Core - IOC

控制反轉, IOC

原名: Inversion of Control,Spring 的核心容器,實作了 IOC 的概念,又稱作 IOC Container

Example:

一般情況下 -> 在 A 類別使用 B 類別時,必須先在 A 類別實例化 B 類別的對象。

而使用了 Spring 的 IoC 容器之後,可以通過它的配置文件(applicationContext.xml),

向 A 類別注入 B 類別的對象,這樣在 A 類別中就不需要實例化 B 類別對象而可以直接使用。

優點:

  1. IOC 容器可以通過配置文件來確定需要注入的實例化對象,因此非常便於進行單元測試。

  2. 物件角度,可以避免物件之間的耦合 ; 容器角度,避免應用依賴容器功能,造成脫離困難。

  3. 通過IOC容器,開發人員不需要關注對像是如何創建的,同時增加新類別也非常方便,只需要修改配置文件即可實現對象的熱插拔

缺點:

  1. 對象是通過反射機制實例化出來的,因此對系統的性能有一定的影響。

  2. 創建對象的流程變得複雜。

反射(Reflection)

如何實踐 🍀

透過 依賴注入 , DI (Dependency Injection),保留抽象介面,讓 組件(Component)依賴於抽象介面,當發生依賴關係時,藉由抽象介面來注入依賴的實際物件。

注入方式

Interface Injection - 強侵入性,實作介面並將介面交由容器管理,卻使得 Component 依賴於容器(框架),降低重用性。 Setter Injection - Spring 鼓勵的注入方式。

Constructor Injection - 優點之一可以在建構時同時完成依賴關係的建立

建構子注入

Setter 注入

沒有部份注入( 完全依賴 )

有部分注入( 部分依賴 )

不會覆蓋 setter 屬性

會覆蓋 setter 屬性

任意修改都會創建實例

任意修改不會創建實例

適用於設置多屬性

適用於設置較少屬性

參考資料

Last updated

Was this helpful?