IOC,即控制反轉,它是一種設計思想。
舉個示例:咱們都知道,在java程序中,每一個業務邏輯至少須要兩個及以上的對象來協做完成,傳統的作法是,對象A在使用它的依賴對象時,本身先new object(),而後new 一個依賴對象B,而後再操做A的方法,固然對象B做爲方法的參數。咱們會發現:對象之間的耦合度比較高,當工程比較大時,這不是一個好現象。IOC的思想是:由spring容器來管理 對象之間的依賴關係,對象只須要關注本身的邏輯業務就行。
以下是更加通俗的解釋:IOC,就是spring負責管理對象的生命週期和對象之間的關係。舉例,咱們在淘寶上買一本書(例如:《spring入門》,xx著做,xx年出版,等等條件),一般的狀況是,咱們是搜索書名,而後點進去看是否是xx著做的,若是是的話,再看是否是xx年出版的,接着……。這個過程是比較繁瑣花時間的,在程序上的作法就是咱們本身設計和編碼每個環節,即在對象A(搜索條件:書名)中使用對象B(排除條件:xx著做),就必須new A()對象,依賴類B(xx著做)和類C(xx年出版)來完成任務。那麼IOC是怎麼完成的呢,即在用戶和淘寶之間引入了第三者(官方稱之爲 工廠類),它是一個條件工具,用戶只須要向該工具中輸入本身的條件(spring入門、xx著做、xx年出版),而後該工具根據用戶的條件進行一系列的操做(官方:由spring初始化類、管理類之間的依賴關係),最後得出該用戶所須要的書。更加智能點,用戶設置好條件,每次啓動系統後,都像用戶推送該用戶所須要的書,這就是控制反轉,即本來應該是由用戶來控制的,如今反過來由spring控制,用戶只須要結果就行。
DI,即依賴注入。在spring中,系統啓動的時候,spring須要處理對象的初始化和對象之間的依賴關係,這個依賴關係就是經過DI來實現的。列舉實例:好比對象A須要操做數據庫,即對象A依賴數據庫對象,原來的作法是,系統啓動後,new A()對象,而後在類A中寫代碼來得到connection對象。spring的作法是:系統啓動以前,A告訴spring,須要一個connection對象,(官方:即在spring的配置文件中,先配置好類A和connection類),啓動系統後,spring主動向類A推送connection對象,類A不須要知道connection對象是什麼時候被建立的,只須要關注本身的業務,使用connection對象鏈接數據庫就行。那麼,DI是如何實現的呢?java 1.3以後有個重要的特性是反射,它容許程序在運行時動態的生成對象、執行對象的方法、設置對象屬性的初始值。java