更新時間:2021-11-23 來源:黑馬程序員 瀏覽量:
計算機編程是把一些實際問題組織并抽象起來的過程,編寫程序時,開發(fā)人員經(jīng)常使用團隊其他成員編寫的代碼或者一些第三方工具(如著名的開源庫或者框架)。隨著項目的擴大.項目中需要依賴的模塊會越來越多,這時如何有效地組織這些模塊是非常重要的。依賴注入能夠有效解決模塊問依賴的問題。
依賴注人的英文是Dependency Injection,在軟件開發(fā)中縮寫為DI。依賴注入應(yīng)用了控制反轉(zhuǎn)的設(shè)計思想,因此很多人也稱依賴注人為控制反轉(zhuǎn)。控制反轉(zhuǎn)(Inversion of Control,loC)是一個重要的面向?qū)ο缶幊痰姆▌t,用來減少計算機程序的耦合問題,它一般分為兩種類型——依賴注人和依賴查找(Dependency Lookup)。簡單地說,控制反轉(zhuǎn)是一種設(shè)計思想,而依賴注入是控制反轉(zhuǎn)思想的一種實現(xiàn)方式。
在程序開發(fā)中,組件獲取依賴通常有3種方式。
①使用new運算符直接創(chuàng)建出依賴。該方式是在自己的應(yīng)用程序中創(chuàng)建依賴對象。它有一個弊端,就是當程序的多個模塊都需要應(yīng)用一個對象時,會造成模塊之間的高耦合;如果一個對象參數(shù)過多,有可能還需要對象創(chuàng)建其他參數(shù)對象,所以這種方式無法適合復(fù)雜的應(yīng)用。
②直接引用依賴,如引用全局變量。該方式需要一定的條件,例如依賴對象對于用戶對象是直接開放的,這里不做討論。
③在需要的地方傳人依賴。該方式便是依賴注入,它的重要特點是在系統(tǒng)運行中可以把創(chuàng)建依賴對象的控制權(quán)交給IoC容器,由IoC容器動態(tài)地通過注入的方式,向某個對象提供它所需要的其他對象。這樣對象與對象之間松散耦合,方便測試,利于功能復(fù)用,更重要的是使得程序的整個體系結(jié)構(gòu)變得非常靈活。
依賴注人對編程帶來的最大改變不是從代碼上(而是從思想上發(fā)生了“主從換位”的變化,把應(yīng)用程序向依賴對象主動出擊變?yōu)閼?yīng)用程序被動的等待,由IoC容器來創(chuàng)建并注入它所需要的資源。例如將IoC容器看作一個“保姆”,“我”看作用戶對象,“蛋糕”看作依賴對象:當“我”想吃“蛋糕”時不是自己來做,而是告訴“保姆”,“保姆”做好之后交給“我”,整個過程如圖4-9所示。