IOC容器(底层原理解读)
IOC的概念和原理
目錄
IOC的概念和原理
1.什么是IOC
(1)控制反轉:
(2)使用IOC的目的:降低耦合度
(3)IOC解耦過程圖解
2.IOC的底層原理
3.IOC接口
(1)IOC思想
(2)Spring提供IOC容器實現兩種方式:(兩個接口)
4.ApplicationContext 接口的實現類
兩個實現類的區別
1.什么是IOC
(1)控制反轉:
IOC—Inversion of Control,即“控制反轉”,不是什么技術,而是一種設計思想
控制:IOC意味著將你設計好的對象交給IOC容器控制,而不是傳統的在你的對象內部直接控制;
? ? ? ? ? ?IOC是有專門一個容器來創建這些對象,即由IOC容器來控制對象的創建;
? ? ? ? ? ?誰控制誰?當然是IOC容器控制了對象;控制什么?那就是主要控制了外部資源獲取(不只是對象包括比如文件等)。
反轉:傳統應用程序是由我們自己在對象中主動控制去直接獲取依賴對象,也就是正轉;
? ? ? ? ? ?反轉則是由IOC容器來幫忙創建及注入依賴對象;
? ? ? ? ? ?由容器幫我們查找及注入依賴對象,對象只是被動的接受依賴對象,所以是反轉;哪些方面反轉了?依賴對象的獲取被反轉了。
IOC 不是一種技術,只是一種思想,一個重要的面向對象編程的法則,它能指導我們如何設計出松耦合、更優良的程序。
傳統應用程序都是由我們在類內部主動創建依賴對象,從而導致類與類之間高耦合,難于測試;
有了IOC容器后,把創建和查找依賴對象的控制權交給了容器,由容器進行注入組合對象,所以對象與對象之間是 松散耦合,這樣也方便測試,利于功能復用,更重要的是使得程序的整個體系結構變得非常靈活。
其實 IOC 對編程帶來的最大改變不是從代碼上,而是從思想上,發生了“主從換位”的變化。應用程序原本是老大,要獲取什么資源都是主動出擊,但是在 IOC/DI 思想中,應用程序就變成被動的了,被動的等待 IOC 容器來創建并注入它所需要的資源了。
?
示例圖:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
(2)使用IOC的目的:降低耦合度
用偽代碼來比較:用工廠類來做例子(注意:工廠類不是IOC模式)
?
原始方式:一個類調用另外一個類的對象使用
?
升級后:工廠模式解耦,但是也不是完全解耦?
?
(3)IOC解耦過程圖解
可能一時半會看不懂圖,但是通過后面深入理解就會豁然開朗
IOC的思想就是我們僅僅通過修改XML配置文件的對象路徑,就可以輕松把對象創建出來去被別的類進行調用
?
2.IOC的底層原理
(1)xml解析、工廠模式、反射
3.IOC接口
(1)IOC思想
? ? ? ? ?基于IOC容器完成,IOC容器底層就是對象工廠
(2)Spring提供IOC容器實現兩種方式:(兩個接口)
?
第一種: BeanFactory ,可以對IOC容器基本實現,是Spring 內部的使用接口,不提供開發人員進行使用
【加載配置文件的時候不會創建對象,在獲取對象(也就是說在使用的時候)才會去創建對象】
?
第二種:ApplicationContext,是BeanFactory 接口的子接口,提供更多強大的功能,一般由開發人員使用
【加載配置文件的時候會把在配置文件中的對象進行創建】
*一般推薦使用第二種,因為Spring框架,要結合web項目進行操作,通俗點來說就是用tomcat服務器進行啟動,因此把這些耗時耗內存的都在項目啟動的時候進行處理更加合適
?
操作步驟:將ApplicationContext 改為 BeanFactory 【實驗結果不變】
?
4.ApplicationContext 接口的實現類
查看的操作步驟如圖:
打開實現類
兩個實現類的區別
一個讀取類路徑下,絕對路徑
一個讀取文件路徑,相對路徑
?
?
?
?
?
?
?
?
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的IOC容器(底层原理解读)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ionic 支持float吗_机器人协会
- 下一篇: JAVA入门级教学之(猜数字测试)