最近學習了一些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();
}
}
以上就是簡單的依賴注入應用,我們通過教務處將老師分配給課堂,這樣課堂並不會關心是哪個老師來上的這門課,我們也就能順利的上完一堂高數課了。