??Spring是什么
通常所說的 Spring 指的是 Spring Framework(Spring 框架)
Spring
是包含了眾多工具方法的 IOC 容器
- 將眾多工具方法的 IOC 容器拆解為三部分
- 眾多工具方法
- IOC
- 容器
眾多工具方法
- 將扳手??理解為一個工具
- 扳手??可以用來打螺絲(方法)
- 扳手??可以用來敲核桃(方法)
- …
容器
- 將水杯理解為容器
- 可以用水杯裝水
- 可以用水杯裝果汁
- 可以用水杯裝牛奶
IOC(Inversion Of Control)
IOC(Inversion Of Control)控制反轉(zhuǎn)
控制反轉(zhuǎn)的內(nèi)容是啥?
對象的生命周期
為什么需要控制反轉(zhuǎn)?(控制反轉(zhuǎn)的作用)
解耦合
舉個栗子??
現(xiàn)在需要編寫一段代碼來模擬實現(xiàn)一輛"車"??
- 劃分為4個部分
- 輪胎
- 底座
- 車身
- 車
實現(xiàn)思路??
定義Car類
public class Car {
private Framework framework;
public Car() {
framework = new Framework();
}
public void init() {
framework.init();
}
}
定義Framework類
public class Framework {
private Bottom bottom;
public Framework() {
bottom = new Bottom();
}
public void init() {
bottom.init();
}
}
定義Bottom類
public class Bottom {
private Tyre tyre;
public Bottom() {
tyre = new Tyre();
}
public void init() {
tyre.init();
}
}
定義Tyre類
public class Tyre {
private int size = 20;
public Tyre() {
}
public void init() {
System.out.println("執(zhí)行 Init() 方法, 輪胎的尺寸為 : " + this.size);
}
}
定義啟動類
public class Application {
public static void main(String[] args) {
Car car = new Car();
car.init();
}
}
可以看到, 上述代碼描述的"車"的輪胎大小是固定的
如果需要修改輪子的大小, 就需要對代碼進行改動
- 兩種方式
- 傳統(tǒng)實現(xiàn)思路
- IOC實現(xiàn)思路
傳統(tǒng)實現(xiàn)思路??
定義Car類
public class Car {
private Framework framework;
public Car(int size) {
framework = new Framework(size);
}
public void init() {
framework.init();
}
}
定義Framework類
public class Framework {
private Bottom bottom;
public Framework(int size) {
bottom = new Bottom(size);
}
public void init() {
bottom.init();
}
}
定義Bottom類
public class Bottom {
private Tyre tyre;
public Bottom(int size) {
tyre = new Tyre(size);
}
public void init() {
tyre.init();
}
}
定義Tyre類
public class Tyre {
private int size = 20;
public Tyre(int size) {
this.size = size;
}
public void init() {
System.out.println("執(zhí)行 Init() 方法, 輪胎的尺寸為 : " + this.size);
}
}
定義啟動類
public class Application {
public static void main(String[] args) {
int size = 12;
Car car = new Car(size);
car.init();
}
}
IOC實現(xiàn)思路??
定義Car類
public class Car {
private Framework framework;
public Car(Framework framework) {
this.framework = framework;
}
public void init() {
framework.init();
}
}
定義Framework類
public class Framework {
private Bottom bottom;
public Framework(Bottom bottom) {
this.bottom = bottom;
}
public void init() {
bottom.init();
}
}
定義Bottom類
public class Bottom {
private Tyre tyre;
public Bottom(Tyre tyre) {
this.tyre = tyre;
}
public void init() {
tyre.init();
}
}
定義Tyre類
public class Tyre {
private int size = 20;
public Tyre(int size) {
this.size = size;
}
public void init() {
System.out.println("執(zhí)行 Init() 方法, 輪胎的尺寸為 : " + this.size);
}
}
定義啟動類
public class Application {
public static void main(String[] args) {
Tyre tyre = new Tyre(30);
Bottom bottom = new Bottom(tyre);
Framework framework = new Framework(bottom);
Car car = new Car(framework);
car.init();
}
}
對比傳統(tǒng)實現(xiàn)思路與IOC實現(xiàn)思路??
控制反轉(zhuǎn)的內(nèi)容是啥?
- 傳統(tǒng)實現(xiàn)思路
- 自己控制對象的生命周期
- this.tyre = new Tyre(size);
- IOC實現(xiàn)思路
- 將對象生命周期的控制權(quán)轉(zhuǎn)交給他人(控制反轉(zhuǎn), 自己控制 → 他人控制)
- this.tyre = tyre;
為什么需要控制反轉(zhuǎn)?(控制反轉(zhuǎn)的作用)
- 傳統(tǒng)實現(xiàn)思路
- 對車子的需求修改時, 需要對每個方法都進行修改(耦合度較高)
- IOC實現(xiàn)思路
- 對車子的需求修改時, 只需要修改對應(yīng)的方法即可(解耦合)
A類引用B類, B類引用C類, C類引用D類…
傳統(tǒng)實現(xiàn)思路是 new
但這樣的實現(xiàn)耦合度較高(當被引用的類的構(gòu)造方法發(fā)生變化, 則整個調(diào)用鏈都需要進行改變)
IOC(控制反轉(zhuǎn))
不再 new, 而是傳入當前對象
此時的調(diào)用鏈仍然是A類引用B類, B類引用C類, C類引用D類…
但當D發(fā)生改變時, 整個調(diào)用鏈的代碼不用全部進行修改, 從而解決了耦合度較高的問題
Spring的基本功能
Spring 的本質(zhì)是一個容器
容器的基本功能有兩個
- 將對象存入到容器
- 從容器中取出對象
舉個栗子??
水杯是一個容器
- 用水杯來存水(將對象存入到容器)
- 喝水杯中的水(從容器中取出對象)
談一談IOC與DI
IOC(Inversion Of control)控制反轉(zhuǎn)
將對象的生命周期托管給他人
DI(Dependency Injection)依賴注入
在程序運行期間, 動態(tài)的將某個對象引入到當前的一種機制
public Bottom(Tyre tyre) {
this.tyre = tyre;
}
以這段代碼為例
- 將對象的生命周期托管給他人(IOC, this.tyre = new Tyre() → this.tyre = tyre)
- 在程序運行期間, 將 tyre 引入到當前(DI)
IOC 與 DI 沒有本質(zhì)上的區(qū)別, 只是從不同的角度來去描述同一個問題
- IOC 側(cè)重的是想法
- DI 側(cè)重的是具體的實現(xiàn)
舉個栗子??
我今天中午想去外面吃(IOC → 想法)
我去外面吃了隆江豬腳飯(DI → 具體實現(xiàn))文章來源:http://www.zghlxwxcb.cn/news/detail-480115.html
??結(jié)尾
創(chuàng)作不易,如果對您有幫助,希望您能點個免費的贊??
大家有什么不太理解的,可以私信或者評論區(qū)留言,一起加油文章來源地址http://www.zghlxwxcb.cn/news/detail-480115.html
到了這里,關(guān)于Spring核心思想的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!