Spring框架底層IOC實現
阿新 • • 發佈:2021-01-11
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容器注入應用程式的某個物件
- 注入了什麼:注入某個物件需要的外部資源