spring的IOC容器比New對象究竟好在哪

作者:OneNoodle
鏈接:https://www.zhihu.com/question/23277575/answer/24259844
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

私以爲以上各位都沒有對spring ioc的精髓講解到位。大多都在很模糊的說是什麼,抽象化的表述或者含糊其辭的說概念。

ioc的思想最核心的地方在於,資源不由使用資源的雙方管理,而由不使用資源的第三方管理,這可以帶來很多好處。第一,資源集中管理,實現資源的可配置和易管理。第二,降低了使用資源雙方的依賴程度,也就是我們說的耦合度。

也就是說,甲方要達成某種目的不需要直接依賴乙方,它只需要達到的目的告訴第三方機構就可以了,比如甲方需要一雙襪子,而乙方它賣一雙襪子,它要把襪子賣出去,並不需要自己去直接找到一個賣家來完成襪子的賣出。它也只需要找第三方,告訴別人我要賣一雙襪子。這下好了,甲乙雙方進行交易活動,都不需要自己直接去找賣家,相當於程序內部開放接口,賣家由第三方作爲參數傳入。甲乙互相不依賴,而且只有在進行交易活動的時候,甲才和乙產生聯繫。反之亦然。這樣做什麼好處麼呢,甲乙可以在對方不真實存在的情況下獨立存在,而且保證不交易時候無聯繫,想交易的時候可以很容易的產生聯繫。甲乙交易活動不需要雙方見面,避免了雙方的互不信任造成交易失敗的問題。因爲交易由第三方來負責聯繫,而且甲乙都認爲第三方可靠。那麼交易就能很可靠很靈活的產生和進行了。

這就是ioc的核心思想。生活中這種例子比比皆是,支付寶在整個淘寶體系裏就是龐大的ioc容器,交易雙方之外的第三方,提供可靠性可依賴可靈活變更交易方的資源管理中心。另外人事代理也是,僱傭機構和個人之外的第三方。嗯,就這樣,希望對題主有幫助。

update=
在以上的描述中,誕生了兩個專業詞彙,依賴注入和控制反轉
所謂的依賴注入,則是,甲方開放接口,在它需要的時候,能夠講乙方傳遞進來(注入)
所謂的控制反轉,甲乙雙方不相互依賴,交易活動的進行不依賴於甲乙任何一方,整個活動的進行由第三方負責管理。

這就是spring IOC的思想所在,不要只談DI IOC這些概念。

人之所惡在好爲人師,不實知,謹慎言。

下面是我個人看了上面文章結合評論中的問題進行的一次回覆:

問:有點小問題,如果是甲方要襪子,那麼他也必須依賴於一個賣襪子的人,這之間就有聯繫了,也就是說甲方也是依賴於乙方的,因爲如果乙方沒有賣襪子的話,甲方也就買不到襪子,自然也就沒法繼續進行,這怎麼就解隅了呢??

答:是解耦的,平時new A()時候是要import包地址的,這就已經寫死了,以後這個引用就死死的指向了那個類,想改變很麻煩,用ac.getbean(“A”)就沒引入包,也就是所謂的不依賴 (就是跟那類A沒關係),它只從容器找那個叫A的類,至於你給我的是啥,看容器中咋配置。舉了例子:比如說是個很常用的dao類,開始你new的很開心,萬一以後需求大改,數據庫mysql換db2了,這個dao文件基本就得重寫,如果這個類已經封裝編譯爲class文件,不能改了怎麼辦。又或者你實例化了一個常用接口。原來那個實現類A不好,要換成B做他的實現類,重寫他的方法。你就得把項目中所有實例化的地方都找出來,再改成B(大項目用了很多的話你就一個一個改類似,萬一漏了就是不小的bug)。用ioc就沒 這個麻煩,直接在配置文件中將叫A的bean指向你新寫的類就可以。所以說他依賴的乙方不是賣襪子的,而是一箇中介

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章