java控制反轉及依賴注入

  先來看看控制反轉的基本含義:編程

    控制反轉(IOC)模式(又稱DI:Dependency Injection)就是Inversion of Control,控制反轉。在Java開發中,IoC意 味着將你設計好的類交給系統去控制,而不是在你的類內部控制。這稱爲控制反轉。換句話說,就是將建立管理對象的工做交給容器來作。測試

    傳統Java SE程序設計,咱們直接在對象內部經過new進行建立對象,是程序主動去建立依賴對象;而IoC是有專門一個容器來建立這些對象,即由Ioc容器來控制對 象的建立;誰控制誰?固然是IoC 容器控制了對象;控制什麼?那就是主要控制了外部資源獲取(不僅是對象包括好比文件等)。設計

    傳統應用程序是由咱們本身在對象中主動控制去直接獲取依賴對象,也就是正轉;而反轉則是由容器來幫忙建立及注入依賴對象;爲什麼是反轉?由於由容器幫咱們查找及注入依賴對象,對象只是被動的接受依賴對象,因此是反轉;哪些方面反轉了?依賴對象的獲取被反轉了。對象

    傳統應用程序都是由咱們在類內部主動建立依賴對象,從而致使類與類之間高耦合,難於測試;有了IoC容器後,把建立和查找依賴對象的控制權交給了容器,由容器進行注入組合對象,因此對象與對象之間是 鬆散耦合,這樣也方便測試,利於功能複用,更重要的是使得程序的整個體系結構變得很是靈活。接口

    IoC對編程帶來的最大改變不是從代碼上,而是從思想上,發生了「主從換位」的變化。應用程序本來是老大,要獲取什麼資源都是主動出擊,可是在IoC/DI思想中,應用程序就變成被動的了,被動的等待IoC容器來建立並注入它所須要的資源了。資源

    IoC很好的體現了面向對象設計法則之一—— 好萊塢法則:「別找咱們,咱們找你」;即由IoC容器幫對象找相應的依賴對象並注入,而不是由對象主動去找。開發

    由容器動態的將某個依賴關係注入到組件之中依賴注入的目的並不是爲軟件系統帶來更多功能,而是爲了提高組件重用的頻率,併爲系統搭建一個靈活、可擴展的平臺。經過依賴注入機制,咱們只須要經過簡單的配置,而無需任何代碼就可指定目標須要的資源,完成自身的業務邏輯,而不須要關心具體的資源來自何處,由誰實現。io

    這就比如在面向對象編程的思想下,「我「充當一個入口類,在這個入口類中,我每次吃飯的時候都要買一雙一次性筷子(每一次使用都要new一次),在這樣的關係下,是」我「(即調用者)每次都要」主動「去買一次性筷子(另外一個類),我對筷子說你老老實實的過來個人手上,是我控制了筷子,那好,在這種控制正轉的關係下,放在現實生活當中,確定是不現實的,並且人是懶惰的,他總會去創造出更加方便本身生活的想法,更確切的作法是,買一雙普通的筷子(非一次性),把他放在一個容器當中(在Spring中叫作IOC容器),你須要使用的時候就對容器說:IOC我想要用筷子(向容器發出請求),接着筷子就會」注入「到的手上,而在這個過程中,你再也不是控制方,反而演變成一名請求者(雖然自己仍是調用者),依賴於容器給予你資源,控制權坐落到了容器身上,因而這就是人們俗稱的控制反轉面向對象編程

    IOC所注重的是設計思想上,從一個常規的建立對象的作法,即new一個對象,轉變成向IOC容器遞交」簡歷「,被動的等待IOC容器返回資源給你。控制反轉即指的是」演藝公司控制演員「,而說到依賴,則是「演員須要公司混飯」,咱們所需求的對象,須要依賴容器來得到,這個過程便是依賴注入。本質上IOC和DI是同一思想下不一樣維度的表現程序設計

    在控制反轉中獲取資源的過程叫作依賴注入,那麼這裏代碼實現也是專一於依賴注入。依賴注入有3種方式,分別爲構造注入,設置注入,接口注入。

相關文章
相關標籤/搜索