控制反轉(zhuǎn)(Inversion Of Control)
是面向?qū)ο缶幊痰囊环N設(shè)計(jì)模式,可以用來降低計(jì)算機(jī)代碼之間的耦合度顺呕。
依賴注入(Dependency Injection)
是這種設(shè)計(jì)模式的實(shí)現(xiàn)方式枫攀,即通過控制反轉(zhuǎn),在對象被創(chuàng)建的時(shí)候株茶,由一個(gè)能夠調(diào)控系統(tǒng)中所有對象的外界實(shí)體来涨,將其所依賴的對象的引用傳遞給它,也可以說忌卤,將依賴注入到對象中扫夜。
起源
2004年Mating Fowler提出了“哪些方面的控制被反轉(zhuǎn)了?”驰徊,并總結(jié)出依賴對象的獲得被反轉(zhuǎn)了笤闯,因?yàn)榇蠖鄶?shù)應(yīng)用都是由兩個(gè)以上的類彼此合作構(gòu)成業(yè)務(wù)邏輯,這就意味著每個(gè)對象需要獲得與合作對象的引用(對象依賴)棍厂,如果獲取的過程都是由自身完成颗味,那么 將導(dǎo)致代碼高度耦合并且難以維護(hù)和調(diào)試。
Spring IOC容器
在Spring中牺弹,IOC容器是控制反轉(zhuǎn)的載體浦马,即調(diào)控系統(tǒng)时呀,控制反轉(zhuǎn)是Spring框架的核心。通過使用IOC容器晶默,對象依賴關(guān)系的管理被反轉(zhuǎn)了谨娜,轉(zhuǎn)到了IOC容器中,并由IOC容器完成對象的注入磺陡,在很大程度上簡化了應(yīng)用的開發(fā)趴梢,把應(yīng)用從重復(fù)的對象依賴關(guān)系管理中解放出來。
簡單的說币他,因?yàn)楹芏鄬ο笠蕾囮P(guān)系的建立和維護(hù)并不需要和系統(tǒng)運(yùn)行狀態(tài)有很強(qiáng)的關(guān)聯(lián)性坞靶,所以可以把面向?qū)ο缶幊讨行枰獔?zhí)行的諸如對象創(chuàng)建、為對象引用賦值等操作交于容器統(tǒng)一完成蝴悉。這樣的話彰阴,這些散落在不同代碼中的功能相同的部分就集中成為容器的一部分,也是成為面向?qū)ο笙到y(tǒng)基礎(chǔ)設(shè)施的一部分拍冠。
面向?qū)ο笙到y(tǒng)中可以對象簡單分為:數(shù)據(jù)對象和處理數(shù)據(jù)的對象尿这,這很大一部分處理數(shù)據(jù)的對象,并不常變化倦微,是系統(tǒng)中的基礎(chǔ)部分妻味,在很多情況下,這些對象以單件的形式存在就能滿足應(yīng)用需求欣福,它們也不常涉及數(shù)據(jù)和狀態(tài)共享,如果涉及共享的話焦履,需要在單件的基礎(chǔ)上做進(jìn)一步處理拓劝。