30歲的小曹,20歲的身體,還在堅持在能力允許控制範圍內22點睡覺,5點起床鍛鍊身體,好好學習,除了加班或者像今天這樣的深夜,再一次寫已經有x百萬人寫過的 spring ioc 的總結部落格。
一、ioc 控制反轉詳解:
1).傳統非spring管理時候的物件間呼叫依賴:
我們都知道,隨便一本破框架的破書上都說spring的核心之一ioc-控制反轉,控制反轉是管理bean的,什麼是bean?一切j**a物件。j**a物件怎麼來的? a a = new a(),new出來的。
那麼我們定義個 pig 類:
public class pig
public string eat()
return "豬會吃!";
我們在定義乙個類: person
public class person
private pig pig;
public void setpig(pig pig)
this.pig pig;
public void usepig()
system.out.println("我打算去餵豬!");
system.out.println(pig.eat());
測試:public class beannstest
public static void mian(string args)throws exception {
pig pig = new pig();
person person = new persion();
person.setpig(pig);
person.usepig();
我打算去餵豬!
豬會吃!
//上面介紹的是j**a傳統方式,呼叫者person主動去建立被依賴物件pig,然後在去呼叫被依賴物件pig的方法eat。比如上面 person 主動建立物件pig,然後調動pig.eat()輸出。
2). 使用spring 後,spring管理bean是通過用xml配置檔案之間管理bean的,例如上面的人和豬的依賴關係:
bean.xml
//中name="pig"的pig是 person方法中setpig的方法,ref="pig"的pig是setpig的引數;
public class beantest
public static void mian(string args)throws exception {
person p = ctx.getbean("person",person.class)
p.usepig();
//結果:
我打算去餵豬!
豬會吃!
從第二種測試結果來看:使用spring框架後,呼叫者無需主動獲取被依賴物件,只需要被動接受spring容器為呼叫者的成員變數賦值即可(配置檔案property),由此可見,使用spring後 呼叫者獲取被依賴物件的方式由原來的主動獲取,變成了 被動接受。於是rod johnson【繞波特 . 真桑】將這種方式稱為控制反轉 ioc。
一、di依賴注入 超級詳解:
1). 因為spring容器 將依賴物件注入給了呼叫者(通過配置檔案),所以呼叫者無需 主動獲取被依賴物件,只要被動等待spring容器注入即可。所以 martine fowler【馬蹄 . 弗勞爾】 稱者叫依賴注入di。
所以spring ioc控制反轉就是依賴注入di,所以spring ioc控制反轉就是依賴注入di,所以spring ioc控制反轉就是依賴注入di,所以spring ioc控制反轉就是依賴注入di。重要的事情說4遍。
當然spring發展到今天已經由原來的xml配置,改成**裡面註解方式了,更方便點。後續有空再給介紹下,希望未來有人會看到。
30歲的小曹,20歲的身體,go ahead!
Spring IoC(控制反轉)
在spring中ioc 控制反轉 是通過使用di 依賴注入 設計預設實現的,那麼什麼是依賴注入呢,所謂依賴注入即是指將呼叫類對介面實現類的依賴關係由第三方注入,取消呼叫類對介面實現類的依賴關係。通過乙個簡單的例子來幫助我們理解依賴注入。首先定義乙個介面,裡面只有乙個quizmaster方法 pack...
Spring IoC(控制反轉)
在spring中ioc 控制反轉 是通過使用di 依賴注入 設計預設實現的,那麼什麼是依賴注入呢,所謂依賴注入即是指將呼叫類對介面實現類的依賴關係由第三方注入,取消呼叫類對介面實現類的依賴關係。通過乙個簡單的例子來幫助我們理解依賴注入。首先定義乙個介面,裡面只有乙個quizmaster方法 pack...
Spring IoC 控制反轉
中文名稱 控制反轉 inversion of control ioc 是什麼 1.將原先由程式設計師通過new 例項化物件的事情交給 spring 來做,即將建立物件的許可權交給spring,前面也提到過spring其實就是乙個容器,當我們需要使用例項化物件的時候,直接從spring容器中取就行了。...