這一節主要通過一個實例來展現幾種注入方式的區別:
有兩個組件A和B,A依賴於B。假定A是一個類,且A有一個方法importantMethod使用到了B. 要使用B,類A必須先獲得組件B的實例引用。若B是一個具體類,則可通過New關鍵字直接創建組件B的實例。但是,如果B是接口,且有多個實現,則問題就變得複雜了。我們固然可以任意選擇接口B的一個實現類,但這也意味着A的可重用性大大降低了,因爲無法採用B的其他實現。
依賴注入是這樣處理此類情形的:接管對象的創建工作,並將該對象的引用注入到需要該對象的組價。主要有三種方式,分別是set注入,構造方法注入,註解注入。
1. set注入
這種方式需要編寫特定的set方法,該方法會被框架調用,以注入一個B的實例。
public class A {
private B b;
public void importantMethod() {
b.usefulMethod();
}
public void setB(B b) {
this.b=b;
}
}
2. 構造器方式注入
spring會縣創建B的實例,在創建A的實例,然後把B注入到實例A中。
public class A {
private B b;
public A(B b) {
this.b = b;
}
public void importantMethod() {
b.usefulMethod();
}
}