Spring IOC 容器詳解

最近學習了一些Spring框架的知識,暫時先總結一下。

許多新手在沒有引路人的情況下可能會碰到許多白癡性的問題。作爲一個有些所得的菜鳥,我把一些常識性的問題再贅述一下。大神輕噴。

Spring的IOC 和 DI

IOC(控制反轉) 和 DI(依賴注入)的關係就像是一個人的名字和外號。作爲Spring框架的內核之一,IOC是它的名字,而DI是爲了方便人們對它的理解而起

什麼是IOC

爲了實現代碼之間的解耦而實現的一種技術。

當A類的依賴於B類時,A類在實例化時總是需要先實例化一個B類,而實例化B類的構造方法如果寫在A類中,勢必會增加兩個類之間的耦合度 並且 讓A類變得龐大而難以靈活的調用。

爲了降低這樣的耦合度,就有N掰的人提出了使用第三方來調控兩個類之間的依賴關係。

這個第三者,把B類的實例引用傳遞(也稱注入)給A類,這樣當A類實例化的時候就不用考慮B的實例問題。這也就是所謂的依賴注入

這個第三者在Spring中就是IOC容器

代碼實例

下面僅通過一個實例來簡述下一依賴注入的概念。

我們的高數老師叫劉小峯,今天他給我們上課,我就簡單寫成代碼

/*
劉小峯的類
*/
public class LiuXiaoFeng{

    public LiuXiaoFeng(){}

    public void say(){
        System.out.println("大家好,我是你們的高數老師劉小峯");
    }
}
/*
高數課的類
*/
public class Math{

    public void MathClass(){
        LiuXiaoFeng liu = new LiuXiaoFeng();
        liu.say();
    }
}

OK,這樣我們上課只需要實例化一個Math類,調用MathClass方法就可以了。

但是我們發現一個問題,如果劉小峯老師生病了怎麼辦,這堂課顯然就上不成了。對我們來說是喜聞樂見的,但是劉老師是個負責人的人,他找了個代課的其他老師。

如果更換老師的話,以上的上課方法就不能再用了

我們希望課堂類能夠和老師無關,無論是哪個老師來,我們都把這節高數課上下去。

我們新建一個老師接口。

然後新建個代課老師類繼承老師接口

public Interface Teacher{
    public void say();
}

public class OtherTeacher implements Teacher{
    public void say(){
        System.out.println("大家好,我是你們的代課老師");
    }
}

重寫高數課類


public class Math{
    private Teacher teacher;
    public Math(Teacher teac){
        this.teacher = teac;
    }
    public void MathClass(){
        teacher.say();
    }
}

這樣的課堂類 又 依賴於Teacher接口和OtherTeacher類了,並沒有達到我們想要的上課效果,這是因爲還沒有引入第三者的緣故。

下面我們引入第三者 教務處!

public class Office{
    public void GoMath(){
        Teacher teacher = new OtherTeacher();
        Math math = new Math(teacher);
        math.MathClass();
    }
}

以上就是簡單的依賴注入應用,我們通過教務處將老師分配給課堂,這樣課堂並不會關心是哪個老師來上的這門課,我們也就能順利的上完一堂高數課了。

UML圖示

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章