詳解spring框架的IOC

深入瞭解IOC

概念

IOC:控制反轉

所謂控制,就是指資源的獲取方式

主動式:

ExamServlet{
			ExamService es=new ExamService ();
			Paper paper=new Paper();// 複雜對象的創建是非常龐大的工程
}

被動式:

ExamServlet{
			Paper paper;
			public void test(){
				paper.checkout();
			}
}

容器是什麼
容器:管理所有的組件(有功能的類);

假設ExamServlet受容器管理,ExamService 也受容器管理;容器可以自動的探查出哪些組件(類)需要用到另一些組件(類);容器幫我們創建ExamService 對象,並把ExamService 對象賦值

容器:主動的new資源變爲被動的接受資源;容器可以理解爲是婚介所;找對象的人由主動獲取變爲被動接受;
在這裏插入圖片描述
DI(Dependency injection)依賴注入
容器能知道哪個組件類運行的時候,需要另外一個類(組件);容器通過反射的形式,將容器中準備好的ExamService 對象,注入(利用反射給屬性賦值)到BookServlet中;

主要是容器管理的組件,都能使用容器提供的強大功能

通過各種方式給容器中註冊對象,所以前是自己new對象嗎,現在所有的對象交給容器創建,給容器中註冊組件,就像是國家負責分配對象一樣,不用自己找對象了,你需要什麼樣的對象,國家給你安排,依賴注入就是給你找的對象指定指標,指定多高多胖等等的屬性
在這裏插入圖片描述

使用spring框架

使用框架一般都分爲三步:1.引入依賴;2.修改配置文件;3.測試
導包
4個核心jar包
在這裏插入圖片描述
日誌包
在這裏插入圖片描述
寫配置
集合了spring的ioc容器管理的所有組件(類)
創建一個Spring Bean Configuration

實例測試

新建Person類
在這裏插入圖片描述
配置文件
在這裏插入圖片描述
測試類
在這裏插入圖片描述

分析

1.對象是什麼時候創建的?

在類的構造方法中打印什麼時候調用,在類的getter、setter方法打印什麼時候調用,然後再容器啓動後打印啓動完成,就可以知道對象是什麼時候創建的
在這裏插入圖片描述
可以看出在容器啓動完成之前,對象已經創建了,並且已經賦值,而且容器是通過類的構造函數創建對象,通過類的getter,setter方法賦值。

2.創建對象是否是單例模式

從容器中取出id爲01的創建好的對象在這裏插入圖片描述
判斷是否相等
在這裏插入圖片描述
結果是相等
在這裏插入圖片描述
說明容器只創建了一次對象,是單例模式

3.獲取不存在的對象,就會報異常

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ‘person03’ available
在這裏插入圖片描述
執行結果
在這裏插入圖片描述

4.只要容器一啓動所有的對象都創建了
在這裏插入圖片描述
可以看出構造函數調用了兩次,一共有兩個對象都創建出來了

小結

  • 結論
    • 給容器中創建一個組件,我們根據id拿到對象
    • 容器創建之後對象就創建了
    • 只要容器一啓動所有的對象都創建了
    • 同一組件在ioc中是單實例的,容器啓動完成之前都已經創建準備好的
    • 如果獲取容器中沒有的組件,獲取組件就會報異常
    • ioc容器在創建這個組件對象的時候,property會利用setter方法爲javaBean屬性進行賦值
    • src 源碼包開始的路徑,稱爲類路徑的開始
    • 所有源碼包裏面的都會被合併放在類路徑裏面
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章