1. 程式人生 > >spring 依賴注入的三種實現方式

spring 依賴注入的三種實現方式

一,什麼是依賴注入?
讓元件依賴於抽象,當元件要與其他實際物件發生依賴關係時,通過抽象來注入依賴的實際物件。

二,依賴注入的三種實現方式?
1.介面注入
2.set注入
3.構造注入

介面注入:指的就是在介面中定義要注入的資訊,並通過介面完成注入。

關於實現介面注入的例子,步驟如下:
(1)編寫一個介面IBusiness,各種資料庫的注入將通過這個介面進行。
/***********IBusiness.java**********/
public interface IBusiness{
public void createDI(DataBase db);
}

(2)任何想要使用資料庫例項的類都必須實現這個介面,業務邏輯類Business實現這個介面IBusiness
/*******Business.java***********/
public class Business implement IBusiness{
private DataBase db;
public void createDI(DataBase db){
this.db = db;
}
……
//根據注入的資料庫類,從XXX資料庫中獲取資料
public void getData(){
……
db.getData();
……
}
}
(3)編寫測試類TestBusiness
/**********TestBusiness.java******

/
public class TestBusiness{
private Business business = new Business();

………
//根據注入的資料庫類,從Oracle資料庫中獲取資料
public void getData(){
…….
business.createDI(new OracleDataBase());
business.getData();
…….
}
}
如果要完成依賴關係注入的物件,必須實現IBusiness介面

Set注入:指的就是在接受注入的類中定義一個Set方法,並在引數中定義需要注入的元素。
為了讓類Business接受DataBase的注入,需要為它定義一個Set方法來接受DataBase的注入。

/****Business.java***********/
public class Business{
private DataBase db;
private void setDataBase(DataBase db){
this.db = db;
}
…….
//根據注入的資料庫類,從xxx資料庫中獲取資料
public void getData(){
…….
db.getData();
……..
}
}

構造注入:構造注入指的就是接受注入的類中定義一個構造方法,並在引數中定義需要注入的元素。
為了讓類Business接受DataBase的注入,需要為它定義一個構造方法,來接受DataBase的注入。
/****Business*********/
public class Business{
private DateBase db;
public Business(DataBase db){
this.db = db;
}
…….
//根據注入的資料庫類,從xxx資料庫中獲取資料
public void getData(){
……
db.getData();
…….
}
}

使用哪種注入方式?
至於使用構造注入或Set注入來完成依賴注入這個問題,一般來說更加推薦使用Set注入,因為構造注入會在建構函式式上留下一長串的引數,且不容易記憶。
而Set注入可以有明確的名稱,可瞭解注入的物件是什麼,像setXXX()這樣的名稱會比記憶Constructor上某個引數位置代表某個物件更好。
Set注入的不足:由於提供了setXXX()方法,所以不能保證相關的資料成員或資源在執行時不會被更改設定。
什麼時候使用構造注入?
如果開發人員想讓一些資料成員或資源變為只讀或是私有,使用構造注入會是個簡單的選擇。