99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Hasor 名稱注入

2018-10-05 10:55 更新

現(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;
}


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)