IOC和DI到底是什嗎?,IOCDI到底

來源:互聯網
上載者:User

IOC和DI到底是什嗎?,IOCDI到底

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

   一、IOC和DI概念

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

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

     那麼IOCDI這兩者又是什麼關係呢?

  IOC就是一種軟體設計思想,DI是這種軟體設計思想的一個實現。而Spring中的核心機制就是DI。

   二、執行個體理解IOC

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對象中。代碼實現如下:

  修改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的本質。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.