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

Spring學習筆記(四):實例剖析Spring IoC解耦全過程

     編輯:Java 相關知識

前文已講解IoC與AOP兩大核心,本文通過「添加用戶」案例,三輪重構演示Spring如何實現解耦。

實例一:強耦合的傳統寫法

UserManagerImpl直接new UserDao4MySqlImpl(),調用類綁定具體實現,違背IoC「控制權交給第三方」原則。

public class UserManagerImpl implements UserManager {
    public void addUser(User user) {
        UserDao userDao = new UserDao4MySqlImpl(); // 硬編碼依賴
        userDao.addUser(user);
    }
}

實例二:構造器注入但Client仍耦合

將UserDao透過構造器注入UserManagerImpl,但Client仍需new UserDao4MySqlImpl(),耦合轉移而未消除。

public class Client {
    public static void main(String[] args) {
        UserDao userDao = new UserDao4MySqlImpl(); // Client仍依賴具體實現
        UserManager userManager = new UserManagerImpl(userDao);
        userManager.addUser(user);
    }
}

實例三:Spring容器接管依賴關係

引入Spring容器,依賴關係外置至XML配置,類之間零硬編碼依賴。

Client代碼極簡化

public class Client {
    public static void main(String[] args) {
        User user = new User(); user.setUsername("張三"); user.setPassword("123456");
        BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserManager userManager = (UserManager) factory.getBean("userManager");
        userManager.addUser(user);
    }
}

applicationContext.xml:依賴關係的外部化聲明

<beans ...>
    <bean id="userDao4MySqlImpl" class="com.zs.spring.dao.UserDao4MySqlImpl" />
    <bean id="userManager" class="com.zs.spring.manager.UserManagerImpl">
        <property name="userDao" ref="userDao4MySqlImpl" />
    </bean>
</beans>

XML相當於程式碼:

UserManager userManager = new UserManagerImpl(userDao);
UserDao userDao = new UserDao4MySqlImpl();

總結:三張類圖的演進

對比三版類圖,Spring框架核心價值清晰可見:

  • 依賴關係外部化:XML配置取代硬編碼
  • 控制反轉:容器管理物件生命週期與裝配
  • 解耦:業務類零依賴具體實現,僅面向介面編程

參考資源

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