看一個生活中的例子:java
這裏的好處顯而易見,就是項目組不須要關注招人,面試,談待遇等等一堆事情,只須要提出用人要求就能夠。面試
對應到代碼中:微信
這裏的好處是Class A不須要關注要使用的類如何建立,只須要聲明要使用該類則可,由容器來建立並注入這個類。post
而容器怎麼分配Class B給Class A就引出了依賴注入(DI)。單元測試
容器要想注入Class B給Class A的幾種方式:測試
1.構造器注入:this
Class A
private B b;
@Autowired
public A(B b) {
this.b = b;
}
}
複製代碼
2.參數注入spa
Class A
@Autowired
public void exec(B b) {
b.doSomeThing();
}
}
複製代碼
3.屬性注入code
Class A
@Autowired
private B b;
public void exec() {
b.doSomeThing();
}
}
複製代碼
本質的好處是解耦,而Spring的依賴注入體現爲如下好處:cdn
1.容易測試,依賴的對象是注入的,所以能夠在單元測試時Mock一個對象並注入來測試
比較如下代碼:
Class A {
public void exec() {
B b = new B();
b.doSomeThing();
}
}
Class A {
public void exec(B b) {
b.doSomeThing();
}
}
複製代碼
第一種方式Class B是在方法內部自行構建的,測試時沒有辦法Mock,而第二種方式則能夠Mock Class B後傳入。
2.不須要本身實現單例模式,Spring中的Bean默認都是單例模式,單例的做用是減小類實例,從而減小內存佔用,而且不用每次使用時都從新實例化,提升效率。
3.基於依賴注入使得容器能夠統一管理Bean以及Bean的生命週期,在Bean的生命週期管理時,能夠統一實現一些通用的公共邏輯,而不須要每一個Bean單獨再實現一遍。
end.
相關閱讀:
Spring Boot入門(一)初識Spring
Spring Boot入門(二)知識地圖
Spring Boot入門(四)全局異常處理
站點: javashizhan.com/
微信公衆號: