dagger2——終篇(下)

前言

如果您對(duì)dagger2的概念只酥,整個(gè)依賴注入框架還不清楚飘诗,可以先了解下我的前2篇文章:dagger2——基礎(chǔ)依賴注入框架篇(上)
dagger2——重點(diǎn)概念講解教藻、融合篇(中)

  1. dagger2到底能帶來哪些好處墓捻?
  2. dagger2怎么使用致板?

我將結(jié)合這2點(diǎn)來進(jìn)行本文的講解交煞。并且會(huì)有具體的sample。
dagger2到底有哪些好處斟或?
咱們直奔主題:

  • 增加開發(fā)效率素征、省去重復(fù)的簡(jiǎn)單體力勞動(dòng)首先new一個(gè)實(shí)例的過程是一個(gè)重復(fù)的簡(jiǎn)單體力勞動(dòng),dagger2完全可以把new一個(gè)實(shí)例的工作做了缕粹,因此我們把主要精力集中在關(guān)鍵業(yè)務(wù)上稚茅、同時(shí)也能增加開發(fā)效率上。省去寫單例的方法平斩,并且也不需要擔(dān)心自己寫的單例方法是否線程安全亚享,自己寫的單例是懶漢模式還是餓漢模式。因?yàn)閐agger2都可以把這些工作做了绘面。
  • 更好的管理類實(shí)例每個(gè)app中的ApplicationComponent管理整個(gè)app的全局類實(shí)例欺税,所有的全局類實(shí)例都統(tǒng)一交給ApplicationComponent管理,并且它們的生命周期與app的生命周期一樣揭璃。每個(gè)頁面對(duì)應(yīng)自己的Component晚凿,頁面Component管理著自己頁面所依賴的所有類實(shí)例。因?yàn)镃omponent瘦馍,Module歼秽,整個(gè)app的類實(shí)例結(jié)構(gòu)變的很清晰。
  • 解耦假如不用dagger2的話情组,一個(gè)類的new代碼是非吃锟辏可能充斥在app的多個(gè)類中的,假如該類的構(gòu)造函數(shù)發(fā)生變化院崇,那這些涉及到的類都得進(jìn)行修改肆氓。設(shè)計(jì)模式中提倡把容易變化的部分封裝起來
    我們用了dagger2后底瓣。
    假如是通過用Inject注解標(biāo)注的構(gòu)造函數(shù)創(chuàng)建類實(shí)例谢揪,則即使構(gòu)造函數(shù)變的天花亂墜,我們基本上都不需要修改任何代碼捐凭。
    假如是通過工廠模式Module創(chuàng)建類實(shí)例拨扶,Module其實(shí)就是把new類實(shí)例的代碼封裝起來,這樣即使類的構(gòu)造函數(shù)發(fā)生變化茁肠,只需要修改Module即可屈雄。

有過一個(gè)這樣的問題,Module的構(gòu)造函數(shù)也會(huì)發(fā)生變化官套,發(fā)生變化后,相應(yīng)的new Module的類也發(fā)生變化,這就沒有達(dá)到解耦的效果奶赔。首先解耦不是說讓類之間或模塊之間真的一點(diǎn)關(guān)系都沒有了惋嚎,解耦達(dá)到的目的是讓一個(gè)類或一個(gè)模塊對(duì)與自己有關(guān)聯(lián)的類或模塊的影響降到最低,不是說這種影響就完全沒有了站刑,這是不可能的另伍。
解耦還有個(gè)好處,就是方便測(cè)試绞旅,若需要替換為網(wǎng)絡(luò)測(cè)試類摆尝,只需要修改相應(yīng)的Module即可。
項(xiàng)目中使用dagger2注意點(diǎn)
具體的代碼就不講了因悲,dagger2 sample地址堕汞,大家自行下載。這里重點(diǎn)說下dagger2對(duì)目標(biāo)類進(jìn)行依賴注入的過程晃琳,現(xiàn)在假設(shè)要初始化目標(biāo)類中的其中一個(gè)依賴類的實(shí)例讯检,那具體步驟就在下面:

  1. 查找Module中是否存在創(chuàng)建該類的方法。
  2. 若存在創(chuàng)建類方法卫旱,查看該方法是否存在參數(shù) 步驟2.1. 若存在參數(shù)人灼,則按從步驟1開始依次初始化每個(gè)參數(shù) 步驟2.2. 若不存在參數(shù),則直接初始化該類實(shí)例顾翼,一次依賴注入到此結(jié)束步驟
  3. 若不存在創(chuàng)建類方法投放,則查找Inject注解的構(gòu)造函數(shù), 看構(gòu)造函數(shù)是否存在參數(shù) 步驟3.1. 若存在參數(shù)适贸,則從步驟1開始依次初始化每個(gè)參數(shù) 步驟3.2. 若不存在參數(shù)灸芳,則直接初始化該類實(shí)例,一次依賴注入到此結(jié)束

以上是dagger2進(jìn)行的一次依賴注入的步驟取逾,其實(shí)這個(gè)步驟是一個(gè)遞歸的過程耗绿,并且在查找類的實(shí)例的過程中Module的級(jí)別要高于Inject,這概念在上一篇講過砾隅。
下面在說下注意的幾點(diǎn)
一個(gè)app必須要有一個(gè)Component(名字可以是ApplicationComponent)用來管理app的整個(gè)全局類實(shí)例
多個(gè)頁面可以共享一個(gè)Component
不是說Component就一定要對(duì)應(yīng)一個(gè)或多個(gè)Module误阻,Component也可以不包含Module
自定義Scope注解最好使用上,雖然不使用也是可以讓項(xiàng)目運(yùn)行起來的晴埂,但是加上好處多多究反。

總結(jié)
好了關(guān)于dagger2的所有的概念知識(shí)點(diǎn)到此終于結(jié)束了,希望能幫助大家儒洛,與大家共勉精耐,有問題可以隨時(shí)與我溝通。
dagger2 sample地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末琅锻,一起剝皮案震驚了整個(gè)濱河市卦停,隨后出現(xiàn)的幾起案子向胡,更是在濱河造成了極大的恐慌,老刑警劉巖惊完,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件僵芹,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡小槐,警方通過查閱死者的電腦和手機(jī)拇派,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凿跳,“玉大人件豌,你說我怎么就攤上這事】厥龋” “怎么了茧彤?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)躬审。 經(jīng)常有香客問我棘街,道長(zhǎng),這世上最難降的妖魔是什么承边? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任遭殉,我火速辦了婚禮,結(jié)果婚禮上博助,老公的妹妹穿的比我還像新娘险污。我一直安慰自己,他們只是感情好富岳,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布蛔糯。 她就那樣靜靜地躺著,像睡著了一般窖式。 火紅的嫁衣襯著肌膚如雪蚁飒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天萝喘,我揣著相機(jī)與錄音淮逻,去河邊找鬼。 笑死阁簸,一個(gè)胖子當(dāng)著我的面吹牛爬早,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播启妹,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼筛严,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了饶米?” 一聲冷哼從身側(cè)響起桨啃,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤车胡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后照瘾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吨拍,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年网杆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伊滋。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碳却,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出笑旺,到底是詐尸還是另有隱情昼浦,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布筒主,位于F島的核電站关噪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏乌妙。R本人自食惡果不足惜使兔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望藤韵。 院中可真熱鬧虐沥,春花似錦、人聲如沸泽艘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匹涮。三九已至天试,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間然低,已是汗流浹背喜每。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脚翘,地道東北人灼卢。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像来农,于是被迫代替她去往敵國(guó)和親鞋真。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • Dagger2 入門 2016-12-21 更新:添加@Subcomponent注解以及Lazy與Provider...
    fxzou閱讀 28,550評(píng)論 77 331
  • 部分內(nèi)容參考自:[Android]使用Dagger 2依賴注入 - DI介紹(翻譯)[Android]使用Dagg...
    AItsuki閱讀 47,342評(píng)論 66 356
  • 幾個(gè)問題 看到Dagger2這個(gè)詞的時(shí)候沃于,相信很多人會(huì)有很多的疑問如下:Dagger2如何使用在例子中涩咖?Injec...
    codeHoward閱讀 7,015評(píng)論 4 10
  • 路燈很亮 去年壞的那一盞也修好了 手機(jī)屏幕隨著燈光的暗亮也自動(dòng)亮暗 有吵架的情侶 嗯……我都聽到了別拉我的聲音 還...
    木曰閱讀 120評(píng)論 0 0
  • 如果得不到 那就快戒掉 如果厭倦了 一溜煙跑掉 活在人世間 快樂很重要海诲!
    艾小墨閱讀 234評(píng)論 0 2