目錄:andorid jar/庫原始碼決議
Dagger、Dagger2:
作用:
1、用于解耦Activity和業務邏輯
2、在使用業務的時候,不需要重復撰寫new代碼,
3、當業務變化的時候,不需要對所有的UI,進行修改,
4、便于測驗,和正式,替換指定Module即可,
栗子:
需要:
1、定義 CommonComponent 的介面 標記 @Component(modules = XXXModule.class) 的注解
2、定義XXXModule 模塊,并標注 @Module 的注解 ,對添加的方法使用 provide開頭,這些 provide方法需要添加 @Provides注解
A業務類:
建構式使用 @Inject 注解
B頁面:
1、定義A業務類的變數,使用@Inject注解
2、在OnCreate中,使用如下代碼進行初始呼叫
DaggerCommonComponent.builder().commonModule(new CommonModule(this)).build().inject(this);
3、DaggerCommonComponent由,使用Dagger自動生成的類(Dagger使用APT技術實作),使用apt生成如下代碼

編譯之后查看APK是下面這樣(紅色部分為自動生成)

4、然后就可以使用了,,,,
原始碼解讀:

①:創建一個 DaggerCommonComponent$Builder物件,用于接收 CommonModule 和回傳 CommonComponent的介面物件
②:創建一個 CommonModule物件,引數是當前物件,并且賦值CommonModule物件給 DaggerCommonComponent$Builder物件的成員
③:檢查 CommonModule物件,并且回傳一個 DaggerCommonComponent物件,且該物件創建了一個Prodiver物件,且賦值為 新增類 CommonModule_ProvideIcommonViewFactory 繼承于Factory(Factory extends Provider),且包含成員CommonModule
④:呼叫DaggerCommonComponent物件的inject并傳入當前物件,創建一個 LoginPresenter 物件,并且賦值給this物件的presenter物件(該物件標記過Inject)
原始碼:https://github.com/square/dagger (Dagger) https://github.com/google/dagger (Dagger2)
引入:
// dagger2 implementation 'com.google.dagger:dagger:2.23.1' annotationProcessor 'com.google.dagger:dagger-compiler:2.23.1'
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/7429.html
標籤:Android
