Android Dagger2 簡單易懂入門總結(jié)

對于dagger2 ,相信很多童鞋都聽說過,因為主流框架? RxJava + retrofit +dagger2? 應用起來很6.我現(xiàn)在簡單記錄下我對dagger2的理解,也給對dagger2有點陌生的的提供一些簡單的資料.

首先需要了解幾個注解標識? @Inject? @module? @Component? @provide? ? 都是用來干甚么的,還是哪代碼來講吧,只憑文字,怕是大家有點難以理解 ,首先先說 @ Inject? 這個注解是用來標識需要注入的目標對象,形象通俗點講,把我們想要的結(jié)果比喻成一盤紅燒肉的話,需要各種材料,和各種器具,是不是有點懵了.別著急,我慢慢給你解釋

上代碼? 這里我就直接拷代碼了

@Inject

class Activity : BaseActivity(){

@Inject lateinit var mPresenter : ActivityPresenter

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(getLayoutResouse())

}

}



通過成員變量注入到目標類 當然場景就是這里其實就是activity? ?我們可以把activity當成一口鍋,


@Inject是Dagger2內(nèi)置的一個注解霸株;

@Inject用來標注目標對象(如上面的mPresenter)刚照;

@Inject用來標注依賴類的構(gòu)造方法(如下面的ActivityPresenter)灸撰;

class?ActivityPresenter@Inject?constructor()?{

?fun doSomething():String{?return?"This is result"?}?

}

可以看到我們定義的MainPresenter 類的構(gòu)造函數(shù)前面加了一個@Inject注解(由于有注解出現(xiàn),顯示無參構(gòu)造器constructor),同時定義了一個方法doSomething传货,返回一個字符串密似。

ActivityPresenter有了@Inject 標注的構(gòu)造函數(shù)就表明,ActivityPresenter這個類是可以通過dagge2被動實例化的!

接下來@module??

這個注解的存在就是因為有一些第三方的類,你是無法加上@inject注解的,比如Gosn,所以可以通過@module來表明你要什么材料,比如蔥姜蒜, 會由這個類提供給你 ,上代碼,

@Module

class ActivityModule() {

@Provides? ?

fun provideGson() = GsonBuilder().create()

}

這里的@module 還有一個用法,就是一個module,可以包括另一個module,是不是很刺激,也就是說,我這邊只有蔥姜蒜,而另一個module那里有醬油,料酒等,可以直接把一個@Module類作為了另一個@Module類的組成部分

代碼

@Module(includes = arrayOf(AppModule::class))

class ActivityModule() {

@Provides? ?

fun provideGson() = GsonBuilder().create()

}

這樣,你這個ActivityModule里面蔥姜蒜,醬油,料酒就都有了,是不是很6?

@Provides

那上面代碼里也出現(xiàn)了??@Provides? ?顧名思義 就是我需要提供的類的實例用@Provides標識之后,dagger2會根據(jù)這個注解去給你拿這個實例這個很好理解,pass


@Component

首先必須強調(diào)被@Component注解的必須是接口 或者抽象類,

好,下面關(guān)鍵的來了,我們東西都準備齊了,但是給誰用呢,這個是比較關(guān)心的!先上代碼,


@Component

@Component(modules = arrayOf(ActivityModule::class))

interface ActivityComponent {

fun inJect(activity: Activity)

}


首先如果我們要注解的是自己的類,不去要module提供,直接@Component注解就可以了,如果有一些第三方需要module提供的,那就得@Component(modules = arrayOf(ActivityModule::class))指定需要提供材料的module? ,其實@Component就是一個注射器,它的作用就是指定我們這些東西要注入到哪里去,也就是我說的那么多材料放在那里,當然炒菜肯定放在鍋里了 ,我在這把Activity比喻成鍋了,,哈哈,恩,就這樣吧,,


fun inJect(activity: Activity)這個inject方法就是指定把蔥姜蒜這些調(diào)料放到哪個鍋里,??

然后重新編譯一下(重點,編譯,編譯),不重新編譯dagger2是不會理你的

編譯后會生成一個以“Dagger”開頭的Component文件劫樟,如DaggerMainComponent吗垮,接下來咱們使用一下:

class Activity : BaseActivity(){

????@Inject lateinit var mPresenter : ActivityPresenter

????override fun onCreate(savedInstanceState: Bundle?) {

????super.onCreate(savedInstanceState)

????setContentView(getLayoutResouse())

????????????initInjection()

????}


????/* Dagger2注入注冊 */

?????private?fun initInjection()?{

?????????DaggerActivityComponent.builder().build().inject(this)

?????}

}


要想起作用垛吗,需要調(diào)用DaggerMainComponent的inject方法進行“注冊”。這個動作可以理解把做菜的材料放到鍋里,材料都齊了,剩下的做的好壞就看你的手藝了!

驗證是否注入成功可以通過打日志來看mPresenter是否被實例化,


本文寫的有點粗糙,如果有問題的話歡迎指正,重要的希望大家能理解,其實dagger2還有其他的注解表示符,我們以后再說! bye

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抱既,一起剝皮案震驚了整個濱河市职烧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蚀之,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捷泞,死亡現(xiàn)場離奇詭異足删,居然都是意外死亡,警方通過查閱死者的電腦和手機锁右,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門失受,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咏瑟,你說我怎么就攤上這事拂到。” “怎么了码泞?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵兄旬,是天一觀的道長。 經(jīng)常有香客問我余寥,道長领铐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任宋舷,我火速辦了婚禮绪撵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘祝蝠。我一直安慰自己音诈,他們只是感情好,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布绎狭。 她就那樣靜靜地躺著细溅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坟岔。 梳的紋絲不亂的頭發(fā)上谒兄,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天摔桦,我揣著相機與錄音社付,去河邊找鬼承疲。 笑死,一個胖子當著我的面吹牛鸥咖,可吹牛的內(nèi)容都是我干的燕鸽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼啼辣,長吁一口氣:“原來是場噩夢啊……” “哼啊研!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鸥拧,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤党远,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后富弦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沟娱,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年腕柜,在試婚紗的時候發(fā)現(xiàn)自己被綠了济似。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡盏缤,死狀恐怖砰蠢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情唉铜,我是刑警寧澤台舱,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站打毛,受9級特大地震影響柿赊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜幻枉,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一碰声、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧熬甫,春花似錦胰挑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至郑象,卻和暖如春贡这,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背厂榛。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工盖矫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丽惭,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓辈双,卻偏偏與公主長得像责掏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子湃望,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

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