在學習Spring框架的時候,咱們老是能見到IOC這個單詞,也時常聽到DI這個詞,那麼他們分別是什麼意思呢?接下來就講講我的對於這兩個概念的理解框架
1、IOC和DI概念ide
IOC(控制反轉):全稱爲:Inverse of Control。從字面上理解就是控制反轉了,將對在自身對象中的一個內置對象的控制反轉,反轉後再也不由本身自己的對象進行控制這個內置對象的建立,而是由第三方系統去控制這個內置對象的建立。學習
DI(依賴注入):全稱爲Dependency Injection,意思自身對象中的內置對象是經過注入的方式進行建立。this
那麼IOC和DI這二者又是什麼關係呢?spa
IOC就是一種軟件設計思想,DI是這種軟件設計思想的一個實現。而Spring中的核心機制就是DI。設計
2、實例理解IOCcode
class Person{ private Wear clothe; public Wear getClothe() { return clothe; } public void setClothe(Wear clothe) { this.clothe = clothe; } public void Wear(){ clothe = new Sweater(); clothe.WearClothe(); } } interface Wear{ void WearClothe(); } class Sweater implements Wear{ @Override public void WearClothe() { // TODO Auto-generated method stub System.out.println("穿毛衣"); } } class Shirt implements Wear{ @Override public void WearClothe() { // TODO Auto-generated method stub System.out.println("穿襯衫"); } }
public static void main(String[] args){ Person person = new Person(); person.Wear(); }
在上面的代碼中咱們定義一個Wear接口,兩個實現了該接口的類Sweater和Shirt,在Person類的Wear須要調用Wear接口的WearClothe方法,傳統的作法是在Person的Wear中建立該接口的實現類,而後經過該對象對調用這個方法。在Person對象的內部建立了這個對象,既是控制了這個對象,當咱們須要調用Shirt的WearClothe方法的時候就須要改動Person類中Wear方法的代碼,去建立一個Shirt類對象。對象
而在IOC的設計思想中,咱們將再也不Person的內部進行建立Clothe屬性的引用對象,而是在外界建立該對象,而後注入到Person對象中。代碼實現以下:blog
修改Person類的Wear方法:接口
public void Wear(){ clothe.WearClothe(); }
在main方法中調用:
public static void main(String[] args){ Wear wear= new Sweater(); Person person = new Person(); person.setClothe(sweater); person.Wear(); }
經過在外界建立一個Wear接口的實現類對象,而後將該對象傳入person對象中,將person對象對於sweater對象的控制反轉,person對象再也不進行Wear接口實現對象的建立。若是咱們須要調用Shirt的wear方法,只須要更改建立Shirt對象,再也不須要修改Person類內部的方法,就能夠實現了。
這就是我理解的IOC,簡單來講就是把原本在類內部控制的對象,反轉到類外部進行建立後注入,再也不由類自己進行控制,這就是IOC的本質。