Inversion of Control,中文名控制反轉。傳統的開發過程當中,對象的建立由程序來控制,或者說由程序員來控制。使用Spring框架後,由Spring容器負責對象的建立和管理,這樣在程序中,就下降了代碼之間的依賴,下降了項目的耦合度。程序員
控制的含義:在傳統開發過程當中,由程序主動去建立依賴的對象,也就是程序控制對象的生成。而IOC是有一個專門的容器來控制對象的生命週期。編程
反轉的含義:正轉是程序主動獲取依賴對象,反轉是容器幫忙建立對象,並注入到程序中,程序被動接收由容器建立的對象。什麼被反轉了?依賴對象的獲取方式被反轉了,由程序主動建立->程序被動接收。框架
DI,Dependency Injection,中文名依賴注入。組件之間的依賴關係由容器在程序運行過程當中決定,換句話說,容器在程序運行期間,動態的將組件之間的依賴關係,注入到組件中。這麼作並不會爲程序帶來更多的功能,可是能夠提高組件重用的能力,創建一個耦合度低、擴展度高、靈活性強的項目。經過依賴注入,代碼裏只須要接收所須要的資源,而不關心資源從何處來,如何實現資源,程序員也能夠將更多精力放在業務邏輯上。若是組件之間的依賴關係發生改變,也不須要修改源代碼,由於代碼裏並無顯式的依賴關係,依賴是由容器注入到程序中的,只須要修改配置文件便可。spa
通常來講,實現依賴注入同時須要咱們面向接口編程,而不是面向實現類編程,由於接口是抽象的,實現類是具體的,若是一個類A依賴於一個具體類B,那麼當業務發生改變,依賴須要變爲具體類C時,類A的代碼也須要改變。而若是採用面向接口編程,讓B、C都實現接口X,那麼類A依賴的就是接口X,若是業務改變,咱們只須要注入接口X不一樣的實現類便可,不須要修改A的源碼。對象
關於依賴注入的幾個基本問題接口
1.誰依賴誰? 程序(代碼)依賴容器生命週期
2.爲何須要依賴? 由於程序(好比某個對象)須要得到某種資源(對象、文件等等)資源
3.誰注入誰? 容器注入程序(對象)
4.注入了什麼? 注入了某個對象須要的外部資源(別的對象、文件、數據等等)開發