首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Spring IOC 通俗解析:為什麼不需要 new 就能用對象

     編輯:程式設計綜合問答

Spring 核心是 IOC(控制反轉)/ DI(依賴注入),簡單說:對象的創建與依賴關係管理由容器接管,開發者只需聲明需求,不再手動 new。

生活化類比

傳統模式:你想喝咖啡(A 依賴 B),得自己買咖啡機、磨豆、沖泡(A 自己創建並管理 B)。
Spring 模式:你告訴管家(容器)我要喝咖啡,管家負責準備好一切送到手邊(容器創建 B 並注入 A)。

代碼對比

// 傳統:強耦合,難測試,難替換實現
public class UserService {
    private UserDao userDao = new UserDaoImpl(); // 寫死具體實現
    public void addUser(User u) { userDao.save(u); }
}

// Spring:鬆耦合,面向接口編程
public class UserService {
    private UserDao userDao; // 依賴接口
    // Setter 注入
    public void setUserDao(UserDao userDao) { this.userDao = userDao; }
    public void addUser(User u) { userDao.save(u); }
}

// XML 配置(或 @Autowired/@Resource 註解)
<bean id="userDao" class="com.dao.UserDaoImpl" />
<bean id="userService" class="com.service.UserService">
    <property name="userDao" ref="userDao" />
</bean>

核心概念

IOC 容器
管理 Bean 生命周期的核心組件(ApplicationContext),負責實例化、注入、銷毀。
Bean
被容器管理的對象,配置 id/class/scope 等元數據。
DI(依賴注入)
容器將依賴對象「推」入被依賴對象,三種方式:構造器注入、Setter 注入、註解注入(@Autowired)。

AOP 是什麼?

面向切面編程,將橫切關注點(事務、日誌、權限、緩存)從業務代碼中分離,通過動態代理在運行時織入。如 @Transactional 註解,Spring 在方法調用前後自動開啟/提交/回滾事務,無需在業務代碼中硬編碼。

為什麼要用?

  • 解耦:業務邏輯不依賴具體實現類,易於單元測試(可注入 Mock 對象)。
  • 統一管理:單例、原型、請求級等作用域由容器控制。
  • AOP 復用:通用邏輯集中維護,業務代碼純粹。

掌握 IOC/DI 思想,Spring 配置不再是背誦標籤,而是理解「誰負責創建、誰負責調用、依賴關係怎麼建立」。

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