首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring IoC 入門實戰:從工廠模式到依賴注入的完整演進

     編輯:Java 相關知識

Spring 模組化與 IoC 核心概念

Spring 模組高度獨立,可按需使用。IoC(Inversion of Control,控制反轉),又稱 DI(Dependency Injection,依賴注入),核心在於:對象間關係由容器管理,而非代碼硬編碼控制。開發者只需宣告依賴,運行時由容器根據 XML 注入。

案例場景:人類介面與實作類別

public interface Human { void eat(); void walk(); }
public class Chinese implements Human { ... }
public class American implements Human { ... }
類別圖:Human 介面與 Chinese、American 實作

傳統工廠模式實作

public class Factory {
    public static final String CHINESE = "Chinese";
    public static final String AMERICAN = "American";
    public Human getHuman(String ethnic) {
        if (ethnic.equals(CHINESE)) return new Chinese();
        else if (ethnic.equals(AMERICAN)) return new American();
        else throw new IllegalArgumentException("參數錯誤");
    }
}

客戶端調用:

Human human = new Factory().getHuman(Factory.CHINESE);
human.eat(); human.walk();
控制台輸出結果

Spring IoC 改寫

1. 定義 bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans>
    <bean id="Chinese" class="cn.com.chengang.spring.Chinese"/>
    <bean id="American" class="cn.com.chengang.spring.American"/>
</beans>
bean.xml 放置於專案根目錄

2. 客戶端使用 ApplicationContext

ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml");
Human human = (Human) ctx.getBean("Chinese");
human.eat(); human.walk();

ctx 相當於原本的 Factory,且利用 Java 反射動態生成對象。

IoC vs 工廠模式:核心差異

維度工廠模式Spring IoC
需求變更修改處修改 Factory 代碼,重新編譯部署修改 bean.xml class 屬性,支援熱插拔(無需重啟)
對象生成機制new 實例化反射動態生成
適用場景固定、單一創建邏輯需彈性切換實作、支援熱部署

進階配置技巧

  • bean.xml 路徑靈活:可置於任意位置,如 `src/cn/com/chengang/spring/bean.xml`
  • 多 bean 檔案:依功能模組劃分,如 `service-beans.xml`、`dao-beans.xml`
  • 屬性注入與單例:
    <bean id="Chinese" class="..." singleton="true">
        <property name="humanName"><value>陳剛</value></property>
    </bean>
    自動注入屬性,singleton=true 確保單例模式。

低侵入性優勢

領域類別(Human、Chinese、American)零依賴 Spring API,無需繼承特定介面/類別。僅 ClientTest 引用 Spring 類別。這是衡量框架優劣的關鍵指標之一。

總結

IoC 靈活性有代價:配置步驟較繁、生成方式不直觀、反射效率稍低。判斷原則:原本使用工廠模式的地方,皆可考慮改用 IoC。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved