目錄:andorid jar/庫源碼解析 html
一、用於解耦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'