3.2 依賴注入的3種實現方式
在講解依賴注入的3種實現方式之前,這裡先澄清一下依賴注入的意義:讓組件依賴於抽象,當組件要與其他實際對象發生依賴關係時,通過抽象來注入依賴的實際對象。
依賴注入的3種實現方式分別是:介面注入(interface injection)、Set注入(setter injection)和構造注入(constructor injection)。接下來筆者還將主要通過舉例的方式,把依賴注入的3種實現方式介紹給讀者。
3.2.1 介面注入(interface injection)
介面注入指的就是在介面中定義要注入的資訊,並通過介面完成注入。結合前面的樣本,其具體步驟如下。
(1)編寫一個介面IBusiness,各種資料庫的注入將通過這個介面進行。IBusiness.java的範例程式碼如下:
//******* IBusiness.java**************
public interface IBusiness {
public void createDI(DataBase db);
}
(2)任何想要使用資料庫執行個體的類都必須實現這個介面,商務邏輯類Business實現這個介面IBusiness。Business.java的範例程式碼如下:
//******* Business.java**************
public class Business implement IBusiness {
private DataBase db;
public void createDI (DataBase db) {
this.db = db;
}
……
//根據注入的資料庫類,從×××資料庫中擷取資料
public void getData() {
……
db.getData();
……
}
}
(3)編寫測試類別TestBusiness。TestBusiness.java的範例程式碼如下:
//******* TestBusiness.java**************
public class TestBusiness {
private Business business = new Business();
……
//根據注入的資料庫類,從Oracle資料庫中擷取資料
public void getData() {
……
business. createDI (new OracleDataBase());
business.getData();
……
}
}
如果要完成依賴關係注入的對象,必須實現IBusiness介面。
3.2.2 Set注入(setter injection)
Set注入指的就是在接受注入的類中定義一個Set方法,並在參數中定義需要注入的元素。為了讓類Business接受DataBase的注入,需要為它定義一個Set方法來接受DataBase的注入。Business.java的範例程式碼如下:
//******* Business.java**************
public class Business {
private DataBase db;
public void setDataBase(DataBase db) {
this.db = db;
}
……
//根據注入的資料庫類,從×××資料庫中擷取資料
public void getData() {
……
db.getData();
……
}
}
更詳細的代碼,可以參看3.1節的第二個例子,採用的就是Set注入的方式。
3.2.3 構造注入(constructor injection)
構造注入指的就是在接受注入的類中定義一個構造方法,並在參數中定義需要注入的元素。為了讓類Business接受DataBase的注入,需要為它定義一個構造方法,來接受DataBase的注入。Business.java的範例程式碼如下:
//******* Business.java**************
public class Business {
private DataBase db;
public Business (DataBase db) {
this.db = db;
}
……
//根據注入的資料庫類,從×××資料庫中擷取資料
public void getData() {
……
db.getData();
……
}
}