Hasor 名稱注入

2018-10-05 10:55 更新

現(xiàn)在我們來假定這樣一個場景,我們?yōu)榱思涌煜到y(tǒng)讀請求準備引用 Cache 技術(shù)。接下來我們的 Cache 都會以 ICache 接口形式呈現(xiàn)。每引入一個 Cache 都會新增一個 ICache 接口對象。例如:

ICache userCache = ...;
ICache dataCache = ...;


根據(jù)上一小節(jié)面講過的類型注入,我們很快的發(fā)現(xiàn)一個類型只能表示一個Bean實例。這就導致上面雖然我們定義了兩個 Cache 對象,但是因為類型相同 Hasor 在進行類型注入時無法區(qū)分的局面。


這時候就要使用本小節(jié)提到的名稱注入方式。在使用名稱注入時首先我們要把兩個相同名稱的 Bean 在 Hasor 上進行特別的聲明:

package net.test.hasor;
public class HelloModule implements Module {
    public void loadModule(ApiBinder apiBinder) throws Throwable {
        apiBinder.bindType(ICache.class).nameWith("user").to(...);
        apiBinder.bindType(ICache.class).nameWith("data").to(...);
    }
}

public class UseBean {
    @Inject("user")
    private ICache user;
    @Inject("data")
    private ICache data;
}


這樣之后 UseBean 的兩個 pojo 屬性就會正確的注入對應的對象。


nameWith方法有一個最大的特點,那就是相同的一個名字可以在不同的類型上重復使用。我們在當前例子上在進一步舉例。


假定 user、data 兩個 cache 的數(shù)據(jù)是來自于兩個不同的數(shù)據(jù)庫分別是 DataSource1 和 DataSource2。那么這兩個數(shù)據(jù)源的定義在結(jié)合前面 ICache 的定義完整應該是如下這樣:

apiBinder.bindType(DataSource.class).nameWith("user").toInstance(...);
apiBinder.bindType(DataSource.class).nameWith("data").toInstance(...);
apiBinder.bindType(ICache.class).nameWith("user").to(...);
apiBinder.bindType(ICache.class).nameWith("data").to(...);


現(xiàn)在我們的 ICache 實現(xiàn)類有兩個,它們分別針對兩個數(shù)據(jù)源做cache。那么 Cache 的實現(xiàn)類應該類似這樣:

public class UseCache implements ICache {
    @Inject("user")
    private DataSource user;
}

public class DataCache implements ICache {
    @Inject("data")
    private DataSource data;
}


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號