W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
現(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;
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: