andorid jar/庫源碼解析之Dagger/Dagger2

目錄:andorid jar/庫源碼解析 html

Dagger、Dagger2:

  做用:

  一、用於解耦Activity和業務邏輯ide

  二、在使用業務的時候,不須要重複編寫new代碼。函數

  三、當業務變化的時候,不須要對全部的UI,進行修改。測試

  四、便於測試,和正式,替換指定Module便可。ui

  栗子:

  須要:this

    一、定義 CommonComponent 的接口 標記 @Component(modules = XXXModule.class) 的註解google

    二、定義XXXModule 模塊,並標註  @Module 的註解 ,對添加的方法使用 provide開頭,這些 provide方法須要添加 @Provides註解spa

  A業務類:code

  構造函數使用 @Inject 註解htm

  B頁面:

  一、定義A業務類的變量,使用@Inject註解

  二、在OnCreate中,使用以下代碼進行初始調用

DaggerCommonComponent.builder().commonModule(new CommonModule(this)).build().inject(this);

  三、DaggerCommonComponent由,使用Dagger自動生成的類(Dagger使用APT技術實現),使用apt生成以下代碼

  

  編譯以後查看APK是下面這樣(紅色部分爲自動生成)

  

  四、而後就能夠使用了。。。。

  源碼解讀:

  

  ①:建立一個 DaggerCommonComponent$Builder對象,用於接收 CommonModule 和返回 CommonComponent的接口對象

  ②:建立一個 CommonModule對象,參數是當前對象,而且賦值CommonModule對象給 DaggerCommonComponent$Builder對象的成員

  ③:檢查 CommonModule對象,而且返回一個 DaggerCommonComponent對象。且該對象建立了一個Prodiver對象。且賦值爲 新增類 CommonModule_ProvideIcommonViewFactory 繼承於Factory(Factory extends Provider),且包含成員CommonModule

  ④:調用DaggerCommonComponent對象的inject並傳入當前對象,建立一個 LoginPresenter 對象,而且賦值給this對象的presenter對象(該對象標記過Inject)

  引入:

// dagger2
implementation 'com.google.dagger:dagger:2.23.1'
annotationProcessor 'com.google.dagger:dagger-compiler:2.23.1'
相關文章
相關標籤/搜索