Dagger2 小節(jié)

Dagger2框架使用小總結(jié)

基本知識(shí)點(diǎn):

  • 依賴注入:就是目標(biāo)類所依賴其他的類初始化過程,傳統(tǒng)方式就是new 和 通過set接口傳遞。引入Dagger2框架呢就不用再手動(dòng)編碼并且降低耦合。而是通過技術(shù)手段把已經(jīng)實(shí)例化的所依賴的類注入到目標(biāo)類中。

  • 注解:用一個(gè)詞就可以描述注解,那就是元數(shù)據(jù),即一種描述數(shù)據(jù)的數(shù)據(jù)(源代碼的元數(shù)據(jù)即提供給JVM 使用的)。

inject的作用

在Dagger2框架中呢,目標(biāo)類在需要依賴其他類的引用名上用注解名inject標(biāo)注。

class A{
    @Inject
    B b;
}

Component的作用

Component類呢是同一個(gè)注解類,一個(gè)類要想是Component,就必須用Component(module = module名.class)(即此component所需的module類)名注解該類。此類必須為接口。基本流程是這樣的。首先component類得到目標(biāo)類的實(shí)例,再在目標(biāo)類中找到用Inject注解的屬性,然后到module類中尋找?guī)в蠵rovides注解的方法把對(duì)應(yīng)的類的對(duì)象實(shí)例注入到目標(biāo)類的需要的屬性中。

小節(jié)

  • 目標(biāo)類想要初始化依賴的其他類:
    + 用Inject注解標(biāo)注目標(biāo)類中所依賴的其他類對(duì)象名。
    + 在module類中存放其他類的對(duì)象實(shí)例,并用Provides注解標(biāo)注獲取方法。
    + 若其他類中還有依賴另外的類,重試上面的兩步。
    + 最后呢在Component接口聲明injectxxx(目標(biāo)類 A),需要的時(shí)候調(diào)用此方法并傳入目標(biāo)類對(duì)象,就完成依賴其他類的注入了(injectXXX方法名為官方推薦)。
  • Component就像注射器把其他類的實(shí)例注入到目標(biāo)類用Inject注解的對(duì)象名中。

Module類

Module主要的的作用就是提供目標(biāo)類中所需要的其他類的實(shí)例。同上一類要成為Module類的話,需要在Module注解該類。有了其他類的實(shí)例呢,自然是要返回給Component類的并注入到目標(biāo)類,此處呢就要用Provides注解返回其他類對(duì)象實(shí)例的接口。

  • ps:小技巧呢第三類庫(kù)或者并不是程序一運(yùn)行就生成的類的對(duì)象呢,是可以直接沒在Provides注解標(biāo)注的方法中直接new出實(shí)例并返回。簡(jiǎn)單舉例呢MVP 架構(gòu),V層和P層一定是相互依賴的,V層的角色一般于Activity或Fragment來承擔(dān)。此時(shí)如果用Dagger2框架解耦呢,V層的對(duì)象一定只能通過調(diào)用Module類的構(gòu)造函數(shù)的時(shí)候傳入當(dāng)前的V層對(duì)象實(shí)例,直接通過Provides注解的返回方法newV層的對(duì)象實(shí)例肯定是不能用的,跟當(dāng)前任務(wù)棧的活動(dòng)實(shí)例沒半毛錢關(guān)系。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容