W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
現(xiàn)在我們來假定這樣一個(gè)場(chǎng)景,我們?yōu)榱思涌煜到y(tǒng)讀請(qǐng)求準(zhǔn)備引用 Cache 技術(shù)。接下來我們的 Cache 都會(huì)以 ICache 接口形式呈現(xiàn)。每引入一個(gè) Cache 都會(huì)新增一個(gè) ICache 接口對(duì)象。例如:
ICache userCache = ...;
ICache dataCache = ...;
根據(jù)上一小節(jié)面講過的類型注入,我們很快的發(fā)現(xiàn)一個(gè)類型只能表示一個(gè)Bean實(shí)例。這就導(dǎo)致上面雖然我們定義了兩個(gè) Cache 對(duì)象,但是因?yàn)轭愋拖嗤?Hasor 在進(jìn)行類型注入時(shí)無法區(qū)分的局面。
這時(shí)候就要使用本小節(jié)提到的名稱注入方式。在使用名稱注入時(shí)首先我們要把兩個(gè)相同名稱的 Bean 在 Hasor 上進(jìn)行特別的聲明:
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 的兩個(gè) pojo 屬性就會(huì)正確的注入對(duì)應(yīng)的對(duì)象。
nameWith
方法有一個(gè)最大的特點(diǎn),那就是相同的一個(gè)名字可以在不同的類型上重復(fù)使用。我們?cè)诋?dāng)前例子上在進(jìn)一步舉例。
假定 user、data 兩個(gè) cache 的數(shù)據(jù)是來自于兩個(gè)不同的數(shù)據(jù)庫分別是 DataSource1 和 DataSource2。那么這兩個(gè)數(shù)據(jù)源的定義在結(jié)合前面 ICache 的定義完整應(yīng)該是如下這樣:
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 實(shí)現(xiàn)類有兩個(gè),它們分別針對(duì)兩個(gè)數(shù)據(jù)源做cache。那么 Cache 的實(shí)現(xiàn)類應(yīng)該類似這樣:
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號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: