1. 程式人生 > 實用技巧 >Spring框架底層IOC實現

Spring框架底層IOC實現

Spring框架底層IOC實現

xml配置+反射+工廠解耦

配置檔案

<bean id="userDao" class="**.UserDaoImpl">

工廠類

class BeanFactory {
    public static UserDao getUserDao(String id) {
        // String className = 解析配置檔案xml 拿到id對應的class
        // 反射
        class clazz = class.forName(className);
        return clazz.newInstance();
    }
}

分析:

  • 通過xml解析獲取物件中屬性的值
  • 通過反射得到位元組碼檔案
  • 通過位元組碼檔案建立物件

IOC的理解

IOC(Inversion of Control)控制反轉,是一種設計思想,明確誰控制誰控制了什麼,為何是反轉,哪方面反轉了?

  • 誰控制誰:傳統的javase程式中,直接在物件內部通過new來建立物件,是由程式主動建立物件,而IOC由IOC容器來建立物件,所以是IOC容器控制了物件
  • 控制了什麼:控制了外部資源獲取(物件,檔案等)
  • 為何是反轉:傳統程式是由我們自己在物件中主動控制去直接獲取依賴物件,即正轉;反轉則是由容器幫忙建立及注入依賴物件;物件只是被動的接收依賴物件
  • 哪方面反轉:依賴物件的獲取被反轉

DI(Dependency Injection)依賴注入,容器動態的將某個依賴關係注入到元件之中,明確誰依賴誰,為什麼需要依賴,誰注入誰,注入了什麼

  • 誰控制誰:應用程式依賴於IOC容器
  • 為什麼需要依賴:應用程式需要IOC容器來提供物件需要的外部資源
  • 誰注入誰:IOC容器注入應用程式的某個物件
  • 注入了什麼:注入某個物件需要的外部資源