關(guān)于dagger2的使用嗓奢,很多人都介紹過了,本人也看了很多博客浑厚,感覺比較好的是大怕#“牛曉偉”的如下三部曲:
Android:dagger2讓你愛不釋手-基礎(chǔ)依賴注入框架篇
Android:dagger2讓你愛不釋手-重點(diǎn)概念講解椿肩、融合篇
Android:dagger2讓你愛不釋手-終結(jié)篇
看完后讓我豁然開朗,讓我有如下感受:
- 了解了各個(gè)注解的含義以及在什么場(chǎng)景下應(yīng)用
- 暫時(shí)明白了使用dagger的好處豺谈,雖然沒感受到
如是我斗志昂揚(yáng)雄心滿滿地就開始了我的第一次嘗試郑象,如下有了如下代碼:
測(cè)試代碼1:TestA
測(cè)試代碼2:TestB依賴TestA
測(cè)試代碼 3:MainActivity依賴TestB
測(cè)試代碼4:component鏈接MainActivity和TestB的橋梁
編譯一次,生成DaggerTestComponent后修改MainActivity里面的代碼茬末,將MainActivity依賴的注入厂榛,如是就有了下面的代碼:
如是便開始運(yùn)行,期待著TestA中的doSomething輸出丽惭,但是結(jié)果卻大相徑庭击奶,程序crash了,說MainActivity中testB是null责掏,我就納悶了柜砾,看別人不就是這么寫的嘛,然后就各種網(wǎng)上各種搜换衬、群里各種搜痰驱、向大牛請(qǐng)教等等,由于是周六瞳浦,沒人回復(fù)担映,等了很久微信群里有人回答了我,讓我把TestB中依賴的TestA改成通過構(gòu)造函數(shù)傳入試試叫潦,當(dāng)時(shí)就覺得不是TestB中carsh蝇完,而是MainActivity里面crash,說明是MainActivity里面注入沒注入成功矗蕊,跟這個(gè)應(yīng)該沒多大關(guān)系短蜕,但是心里雖是這么想,但是還是得嘗試著改下傻咖,如是就將TestB改成如下的樣子了:
再次運(yùn)行忿危,竟然成功了,好欣喜没龙、好激動(dòng)!6忻怠硬纤!但是讓我很納悶。赃磨。筝家。為啥我那樣寫不行?邻辉?溪王?
通過生成的DaggerTestComponent腮鞍,查看生成的方法,讓我明白了莹菱,每個(gè)依賴注解移国,得讓dagger知道怎么生成該依賴,于是我再次修改:
?添加TestB的注入接口
在TestB中添加注入方法
再次運(yùn)行道伟,依然是成功的迹缀,于是簡(jiǎn)單得出如下結(jié)論: