????IOC:IOC,另外一種說法叫DI(Dependency Injection)门驾,即依賴注入射赛。它并不是一種技術(shù)實(shí)現(xiàn),而是一種設(shè)計(jì)思想奶是。在任何一個有實(shí)際開發(fā)意義的程序項(xiàng)目中楣责,我們會使用很多類來描述它們特有的功能,并且通過類與類之間的相互協(xié)作來完成特定的業(yè)務(wù)邏輯诫隅。這個時候腐魂,每個類都需要負(fù)責(zé)管理與自己有交互的類的引用和依賴,代碼將會變的異常難以維護(hù)和極度的高耦合逐纬。而IOC的出現(xiàn)正是用來解決這個問題蛔屹,我們通過IOC將這些相互依賴對象的創(chuàng)建、協(xié)調(diào)工作交給Spring容器去處理豁生,每個對象只需要關(guān)注其自身的業(yè)務(wù)邏輯關(guān)系就可以了兔毒。
? ? 一個系統(tǒng)中有很多很多的類(圖1)
各個類之間幾乎都有依賴關(guān)系,在ioc出現(xiàn)之前甸箱, ? ?每個類管理自己的依賴育叁,類之間直接依賴,會出現(xiàn)a依賴b芍殖,b依賴c的情況豪嗽,非常亂,耦合度非常高豌骏,如圖2龟梦,這點(diǎn)我是深有感觸的,每次用到一個對象都要new一個
而IOC得出現(xiàn)就是解決這種問題窃躲,由spring容器統(tǒng)一管理依賴计贰,如圖3,各個類之間不再有直接的依賴蒂窒,而是有容器躁倒,作為一個中間件荞怒,統(tǒng)一管理;
當(dāng)類b中需要用到a對象時秧秉,不再主動去創(chuàng)建褐桌,而是由容器主動創(chuàng)建一個a,并且送到b中福贞,這樣就由主動獲取變?yōu)榱吮粍幼⑷膂曜穑簿褪恰耙蕾囎⑷搿迸c“控制反轉(zhuǎn)”的由來易桃;同時減少了直接依賴,每個類都成為了獨(dú)立的,耦合度也大大降低了走净。