DI學(xué)習(xí)筆記

所謂依賴滑黔,舉個例子說明,一個類Person环揽,另一個類Car略荡,如果Person的某個方法比如說drive,需要引用Car歉胶,則稱Person類依賴于 Car類汛兜,延伸到對象,這種依賴關(guān)系依然成
立跨扮,比如說Person類的對象boy依賴于Car類的對象toyota序无。再講講這個drive方法的實現(xiàn),假定代碼如下:

Public Person{  
...  
public void drive(){  
  Car toyota=new Car("TOYOTA");  
  toyota.掛檔;  
  toyota.踩油門;  
  toyota.打方向;  
}  
}  
這其中的依賴關(guān)系衡创,就導(dǎo)致了對象boy需要負(fù)責(zé)對象toyota的創(chuàng)建帝嗡,甚至是整個生命周期的管理,而這樣顯然會帶來耦合度高璃氢,不易維護(hù)等缺點哟玷,比如說要讓這個男孩駕駛

一輛Audi,則還需要修改類Person的代碼。
因此在java的設(shè)計理論中就提出了一條非常著名的原則巢寡,依賴倒轉(zhuǎn)原則(Dependence Inversion)喉脖,其核心思想就是要將這種具體類之間的依賴,盡量轉(zhuǎn)換成抽象依賴抑月,
也就是說類Person應(yīng)該依賴于抽象類ICar树叽,而不是具體的類 Car,這里java就大力推薦了抽象和接口的使用谦絮,至于抽象和接口之間的區(qū)別题诵,任何一本JAVA書籍都有介紹,這里就
不再說了层皱。
這個依賴倒轉(zhuǎn)原則在設(shè)計模式也體現(xiàn)得非常多性锭,比如說工廠模式和構(gòu)建模式,個人認(rèn)為控制反轉(zhuǎn)IoC叫胖,其實也可以認(rèn)為是實現(xiàn)這個原則的一種設(shè)計模式草冈。控制反轉(zhuǎn)瓮增,其中的
控制這個詞一直不太理解是什么意思怎棱,不過控制反轉(zhuǎn)的另外一種說法也就是依賴注入(dependence injection),個人覺得更易于理解钉赁。還是以上文的boy與toyota為例蹄殃,其核
心就是要將boy依賴的對象toyota注入到boy中去,而無需boy自己去引用toyota你踩,這個注入的過程诅岩,通常是由一個控制程序來完成的,無需對象去關(guān)心带膜,舉例如下:

Public Person{  
private ICar car;  
public Person(ICar onecar){    
car=onecar;  
}  
public void drive(){    
 car.掛檔;   
 car.踩油門;    
 car.打方向;  
}  
} 

這個時候吩谦,進(jìn)行注入并且調(diào)用的過程,就很簡單了膝藕,如下:

Toyota toyota=new Toyota();  
Person boy=new Person(toyota);  
boy.drive();  
注:這里我們假定式廷,Toyota類是ICar接口類的一個具體實現(xiàn)。    這個例子就演示一個最簡單的注入方式的例子芭挽,也就是構(gòu)造子方式注入滑废,通過將依賴對象注入到對象的構(gòu)造子中來實現(xiàn)。另外還有一種常用的注入方式袜爪,就是屬性方式注入

蠕趁,意思就是通過將依賴對象注入到對象的屬性中來實現(xiàn),還是以boy和toyota的例子說明辛馆,如下:

Public Person{  
private ICar car;  
public Person(){  
}  
public void drive(){  
  car.掛檔;  
  car.踩油門;  
  car.打方向;  
}  
public ICar getCar(){  
  return this.car;  
}  
public void setCar(ICar onecar){  
  car=onecar;  
}  
}  

這個時候俺陋,進(jìn)行注入并且調(diào)用的過程,就變成如下所示:
Toyota toyota=new Toyota();  
Person boy=new Person();  
boy.setCar(toyota);  
boy.drive();  

至此依賴注入的概念應(yīng)該比較清楚了,再來看看在Spring中如何實現(xiàn)IoC的腊状,看看Spring如何作為一個成熟的IoC容器诱咏,Spring中其實主要通過兩個概念來實現(xiàn)IoC,首先通

過XML配置文件缴挖,將對象和依賴對象都配置到某個XML文件中袋狞,當(dāng)然該XML文件需要符合Spring指定的規(guī)范,然后通過架構(gòu)中的BeanFactroy類映屋,來自動實現(xiàn)上文所述注入過程硕并,
還是以boy與toyota為例,如下:首先秧荆,Person類還是一樣的,然后xml配置文件增加點東西-(假定為bean.xml):

<?xml version="1.0" encoding="GBK"?>  
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"  
    "http://www.springframework.org/dtd/spring-beans.dtd">  
<beans>  
   <bean id="oneCar" class="Toyota"> <!-- Toyota類是ICar的一個實現(xiàn)-->  
   </bean>  
   <bean id="onePerson" class="Person"> <!--本例以屬性方式注入為例 -->  
       <property name="car">   
           <ref bean="oneCar"></ref>  
       </property>  
   </bean>  
</beans>  

最后埃仪,調(diào)用的過程乙濒,就變成如下:

BeanFactory factory=new XmlBeanFactory("bean.xml");  
Person boy=(Person )factory.getBean("onePerson");  
boy.drive();  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市卵蛉,隨后出現(xiàn)的幾起案子颁股,更是在濱河造成了極大的恐慌,老刑警劉巖傻丝,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甘有,死亡現(xiàn)場離奇詭異,居然都是意外死亡葡缰,警方通過查閱死者的電腦和手機(jī)亏掀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泛释,“玉大人滤愕,你說我怎么就攤上這事×#” “怎么了间影?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵,是天一觀的道長茄茁。 經(jīng)常有香客問我魂贬,道長,這世上最難降的妖魔是什么裙顽? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任付燥,我火速辦了婚禮,結(jié)果婚禮上锦庸,老公的妹妹穿的比我還像新娘机蔗。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布萝嘁。 她就那樣靜靜地躺著梆掸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪牙言。 梳的紋絲不亂的頭發(fā)上酸钦,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天,我揣著相機(jī)與錄音咱枉,去河邊找鬼卑硫。 笑死,一個胖子當(dāng)著我的面吹牛蚕断,可吹牛的內(nèi)容都是我干的欢伏。 我是一名探鬼主播,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼亿乳,長吁一口氣:“原來是場噩夢啊……” “哼硝拧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起葛假,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤障陶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后聊训,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抱究,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年带斑,在試婚紗的時候發(fā)現(xiàn)自己被綠了鼓寺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,973評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡遏暴,死狀恐怖侄刽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情朋凉,我是刑警寧澤州丹,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站杂彭,受9級特大地震影響墓毒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜亲怠,卻給世界環(huán)境...
    茶點故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一所计、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧团秽,春花似錦主胧、人聲如沸叭首。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽焙格。三九已至,卻和暖如春夷都,著一層夾襖步出監(jiān)牢的瞬間眷唉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工囤官, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留冬阳,地道東北人。 一個月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓党饮,卻偏偏與公主長得像肝陪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子刑顺,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,982評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法见坑,類相關(guān)的語法,內(nèi)部類的語法捏检,繼承相關(guān)的語法,異常的語法不皆,線程的語...
    子非魚_t_閱讀 31,669評論 18 399
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,348評論 25 707
  • 這部分主要是開源Java EE框架方面的內(nèi)容贯城,包括Hibernate、MyBatis霹娄、Spring能犯、Spring ...
    雜貨鋪老板閱讀 1,397評論 0 2
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)犬耻,斷路器踩晶,智...
    卡卡羅2017閱讀 134,720評論 18 139
  • 7.循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN) 基礎(chǔ) 7.1 RNN(recurrent neural network)原理 7.1....
    _木豆_閱讀 21,273評論 0 31