Dagger2和MVParms的学习
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Dagger2和MVParms的学习
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                Dagger2學習成本有點高:
推薦幾篇博客:
https://www.jianshu.com/p/cd2c1c9f68d4這里講依賴注入
https://www.jianshu.com/p/3a3748260eac這里講注解
https://blog.csdn.net/u013320868/article/details/54926578這里依賴注入實現一個butterknife
https://blog.csdn.net/mq2553299/article/details/73065745他有4篇需要看完
https://www.jianshu.com/p/22c397354997這篇需要反復看很不錯
https://www.jianshu.com/p/c556b415b800這里講dagger2和MVP模式結合很不錯
代碼地址:稍后
Dagger2學習筆記一:
/** * dagger2理解: * 1.@Inject標記的屬性,表示這個屬性將會被注入到當前類中---提供注入數據 * 2.@Inject標記的構造方法,表示在注入過程中將會調用這個方法來實例化 * 3.@Module標記的是類 * 4.@Module也表示---提供注入數據的模塊 * 5.@Module的一般作用是提供一個 無法直接使用@Inject標記構造方法來實例化的 實例(比如OkHttpClient的構造方法沒有標記@Inject, * 就需要HttpActivityModule2來實例化一個OkHttpClient實例,提供出來) * 6.@Provides標記一個方法,表示這個方法要提供實例,這個實例在某個類中被@Inject標記的 * 7.@Component表示注射器,用于連接提供數據的類和使用數據的類 * 8.@Component標記的是接口 * 9.@Component在只存在@Inject地方不用寫(modules = xxxx.class)因為沒得! * 10.@Component在有module的時候,需要寫modules = HttpActivityModule2.class。關聯的提供數據的類 * 11.@Component重寫一個 void inject(A01SimpleActivity activity)方法,關聯使用數據的類; * 12.在使用屬性的地方,比如這里的MainActivity需要注意的地方: * 12a.對比MainActivity和HttpActivity,不使用Module可以不寫httpActivityModule2 * 12b.使用了Module的,且Module有參數的必須寫httpActivityModule2 * 小結: * @Inject 注解構造 生成“大眾”工廠類 * 或者 * @Module +@Providers 提供注入“私有”工廠類 * 然后通過Component 創建獲得Activity,獲得工廠類Provider,統一交給Injector * 最后Injector將Provider的get()方法提供的對象,注入到Activity容器對應的成員變量中,我們就可以直接使用Activity容器中對應的成員變量了! * * * Dagger2理解 * 1.通過DaggerXXXComponent.builder().build()出來的,實際是XXXComponent的實例 * 2.在@Component中void inject(XXX xxx)表示注入到哪個類里面 * 2.1如果在@Component中這樣使用,比如ApplicationComponent中 這個方法ApplicationBean providerAppBean(); 說明將BeanForApplication開放給其他Component使用 * 2.1https://blog.csdn.net/u010961631/article/details/72626134 * 3.在使用依賴是子的作用范圍不能大于父 * 4.@singleTon只是限定范圍內為單例 * 5.編譯后生成的Component實現類的名稱是Dagger+我們所定義的Component接口的名稱。 * 6.Component中返回值為void且有參的方法,方法名是無所謂的,參數是最重要的代表的是要注入的目標位置,但是方法名一般為inject; * 7.Component中返回值不為void且無參的方法,方法名是無所謂的,返回值是最重要的代表的是暴露給子Component使用的依賴或者是獲取的子Component的類型。 */Dagger2學習筆記二
/** * 這個例子可以表明 * 0.在MainActivity的注入里面 .appComponent(MyApplication.appComponent)一下,就能使用AppModule提供的屬性 * 1.@SingleTon確實是有效的 * 2.在MainActivity里面注入了mainPresenter,那么這時MainPresenter已經被實例化了 * 3.實例化了MainPresenter,那么MainPresenter里面需要注入的其他屬性都被注入了(MainActivity里可以用的,MainPresenter也可以用) * 3.1這一點通過DaggerMainAcitivityComponent可以看出來 * 3.2: * this.mainPresenterProvider = MainPresenter_Factory.create(mainPresenterMembersInjector, provideLoginViewProvider); * this.mainActivityMembersInjector = MainActivity_MembersInjector.create(sharedPreferencesProvider, myApplicationProvider, mainPresenterProvider); * mainActivityMembersInjector的創建,是傳入了myApplicationProvider和sharedPreferencesProvider的 * 所以MainPresenter里面可以用myApplication,mainPresenter,是注入了的。 * 不用再在Presenter里面DaggerXXXComponent.builder().build().inject()了。 * 4.TestClass的實例化表明:要想實例化Presenter,那么presenter里面所有的屬性都需要被實例化。不用再Presenter里面做“注入操作” * 4.1這里的“注入操作”是在實例化presenter時,由框架自身實現的。 * */MVPamrs全家桶的理解
總結
以上是生活随笔為你收集整理的Dagger2和MVParms的学习的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: java 开发中常用的字符串工具类,St
- 下一篇: A+B for Matrices 及
