也談Spring之依賴注入DI/控制反轉IOC
阿新 • • 發佈:2018-12-20
首先提問, 什麼是 Spring IOC 容器?
Spring 框架的核心是 Spring 容器。容器建立物件,將它們裝配在一起,配置它們並管理它們的完整生命週期。Spring 容器使用依賴注入來管理組成應用程式的元件。容器通過讀取提供的配置元資料來接收物件進行例項化,配置和組裝的指令。該元資料可以通過 XML,Java 註解或 Java 程式碼提供。
然而,到底什麼是依賴注入?
在依賴注入中,您不必建立物件,但必須描述如何建立它們。您不是直接在程式碼中將元件和服務連線在一起,而是描述配置檔案中哪些元件需要哪些服務。由 IoC 容器將它們裝配在一起。
那麼,可以通過多少種方式完成依賴注入?
通常,依賴注入可以通過三種方式完成:
-
建構函式注入
-
setter 注入
-
介面注入 在 Spring Framework 中,僅使用建構函式和 setter 注入。
注入方式:區分建構函式注入和、setter 注入、自動裝配
建構函式注入 | setter 注入 |
---|---|
沒有部分注入 | 有部分注入 |
不會覆蓋 setter 屬性 | 會覆蓋 setter 屬性 |
任意修改都會建立一個新例項 | 任意修改不會建立一個新例項 |
適用於設定很多屬性 | 適用於設定少量屬性 |
spring 中有多少種 IOC 容器?
-
BeanFactory - BeanFactory 就像一個包含 bean 集合的工廠類。它會在客戶端要求時例項化 bean。
-
ApplicationContext - ApplicationContext 介面擴充套件了 BeanFactory 介面。它在 BeanFactory 基礎上提供了一些額外的功能。
區分 BeanFactory 和 ApplicationContext。
BeanFactory | ApplicationContext |
---|---|
它使用懶載入 | 它使用即時載入 |
它使用語法顯式提供資源物件 | 它自己建立和管理資源物件 |
不支援國際化 | 支援國際化 |
不支援基於依賴的註解 | 支援基於依賴的註解 |
列舉 IoC 的一些好處。
IoC 的一些好處是:
-
它將最小化應用程式中的程式碼量。
-
它將使您的應用程式易於測試,因為它不需要單元測試用例中的任何單例或 JNDI 查詢機制。
-
它以最小的影響和最少的侵入機制促進鬆耦合。
-
它支援即時的例項化和延遲載入服務。
Spring IoC 的實現機制。
Spring 中的 IoC 的實現原理就是工廠模式加反射機制。
示例:
interface Fruit {
public abstract void eat();
}
class Apple implements Fruit {
public void eat(){
System.out.println("Apple");
}
}
class Orange implements Fruit {
public void eat(){
System.out.println("Orange");
}
}
class Factory {
public static Fruit getInstance(String ClassName) {
Fruit f=null;
try {
f=(Fruit)Class.forName(ClassName).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return f;
}
}
class Client {
public static void main(String[] a) {
Fruit f=Factory.getInstance("io.github.dunwu.spring.Apple");
if(f!=null){
f.eat();
}
}
}