Spring中IOC與DI的的區別


依賴注入的前提:

 有IOC的環境,也就是將必須對象的創建權交給了Spring.

DI 介紹 

Dependency Injection 依賴注入.需要有IOC 的環境,Spring 創建這個類的過程中,Spring 將類的依賴的屬性設置進去.

IOC與DI的的區別: 

IOC:  控制反轉,將類的對象的創建交給Spring類管理創建. 
DI:    依賴注入,將類里面的屬性在創建類的過程中給屬性賦值. 
DI和IOC的關系: DI不能單獨存在,DI需要在IOC的基礎上來完成.

這樣做得好處:做到了單一職責,並且提高了復用性,解耦了之后,任你如何實現,使用接口的引用調用的方法,永遠不需要改變

 

舉一個栗子:

寫個接口,說咱們購物去~

public interface IShopping {
    void drive();
    String Money();    
}

在實現它兩下:有錢人購物,沒錢人購物     - -!這栗子舉的

 

復制代碼
public class RichMan implements IShopping{
    @Override
    public void drive() {
        System.out.println("Drive By Benz");        
    }

    @Override
    public String Money() {
        System.out.println("lot`s of money");
        return "10000";
    }
}
復制代碼
復制代碼
public class PoorGuy implements IShopping{
    @Override
    public void drive() {
        System.out.println("take a walk!");
    }

    @Override
    public String Money() {
        System.out.println("nothing");
        return "1";
    }
}
復制代碼

然后我們出去玩,順便shopping一下吧~

復制代碼
public class Play {
    
    private IShopping shoppingSomething;
    
  //使用構造方法,將實現傳入 public Play(IShopping shoppingSomething){ this.shoppingSomething = shoppingSomething; } public void withgirlFriend(){ shoppingSomething.drive(); shoppingSomething.Money(); }
}
復制代碼

 

將想用的實現方式,用容器注入進來,這里就模擬下下怎么注入:

public class Containner {
    
    public Play getShopping(){
        return new Play(new RichMan());
    }
}

 

測試一下:

public static void main(String[] args) {
        Containner containner = new Containner();
        Play play =  containner.getShopping();
        play.withgirlFriend();    
    }

結果是:

Drive By Benz
lot`s of money

如果再依賴注入的配置時,配置為窮人的實現,那我們的代碼都不用變,結果就會改變~   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM