所謂依賴(lài)注入,就是由IOC容器在運(yùn)行期間,動(dòng)態(tài)的將某種依賴(lài)關(guān)系注入到對(duì)象之中!?。∵@句話(huà)求解釋
我覺(jué)得是有兩個(gè)知識(shí)點(diǎn)的不理解,造成了對(duì)這句話(huà)不理解,第一:容器是什么?可以形象一點(diǎn)的解釋一下嗎?第二:某種依賴(lài)關(guān)系注入到對(duì)象中,這里的依賴(lài)關(guān)系指的是什么?注入又是否是指邏輯表示出來(lái)這種關(guān)系?
2016-04-25
你可以這么想象,容器就是游泳池,對(duì)象就是游泳的人,?當(dāng)你new 出對(duì)象時(shí)就是允許人進(jìn)入游泳池。所以你就是游泳池管理員,需要控制游泳的人數(shù),可是如果你做得不稱(chēng)職,隨便讓人進(jìn)去游泳池(new 出太多對(duì)象,或者很多其它情況。。),這樣游泳池的人就可能會(huì)太多了,沒(méi)地方游泳了(內(nèi)存溢出)。那怎么辦,為了更好管理游泳池,你可以把控制權(quán)交給被人,讓別人幫你管理,這就是IOC-控制反轉(zhuǎn)。由IOC管理的“游泳池”就是IOC容器。
然后依賴(lài)關(guān)系你可以想象成為游泳學(xué)員和教練的關(guān)系,學(xué)員需要教練的協(xié)助才可以活動(dòng)。從代碼上來(lái)說(shuō)就是一個(gè)對(duì)象(學(xué)員)需要引用其它對(duì)象(教練)才能執(zhí)行功能,這就是依賴(lài)關(guān)系。
注入,你可以想象為幫學(xué)員找教練,有時(shí)候一個(gè)教練可以教多個(gè)學(xué)員(教練是單例),有時(shí)候一個(gè)教練只可以教一個(gè)學(xué)員,如果你處理不當(dāng)?shù)脑?huà),讓太多教練進(jìn)入游泳池,這樣可能會(huì)導(dǎo)致游泳池太多人。所以Spring,JavaEE等框架會(huì)幫你處理這個(gè)事,你只要告訴框架有這樣的依賴(lài)關(guān)系或需要就可以了。在代碼上,給你引用的對(duì)象加上@Autowired (Spring), @EJB(JavaEE),這樣框架就會(huì)在運(yùn)行中幫你找到相應(yīng)的對(duì)象而不需要你去管理。