IOC和DI究竟是什麼?

   在學習Spring框架的時候,咱們老是能見到IOC這個單詞,也時常聽到DI這個詞,那麼他們分別是什麼意思呢?接下來就講講我的對於這兩個概念的理解框架

   1、IOC和DI概念ide

  IOC(控制反轉):全稱爲:Inverse of Control。從字面上理解就是控制反轉了,將對在自身對象中的一個內置對象的控制反轉,反轉後再也不由本身自己的對象進行控制這個內置對象的建立,而是由第三方系統去控制這個內置對象的建立。學習

  DI(依賴注入):全稱爲Dependency Injection,意思自身對象中的內置對象是經過注入的方式進行建立。this

     那麼IOCDI這二者又是什麼關係呢?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的本質。

相關文章
相關標籤/搜索