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.对比MainActivityHttpActivity,不使用Module可以不写httpActivityModule2
 * 12b.使用了Module的,且Module有参数的必须写httpActivityModule2
 * 小结:
 * @Inject 注解构造 生成大众工厂类
 * 或者
 * @Module +@Providers 提供注入私有工厂类
 * 然后通过Component 创建获得Activity,获得工厂类Provider,统一交给Injector
 * 最后InjectorProviderget()方法提供的对象,注入到Activity容器对应的成员变量中,我们就可以直接使用Activity容器中对应的成员变量了!
 *
 *
 * Dagger2理解
 * 1.通过DaggerXXXComponent.builder().build()出来的,实际是XXXComponent的实例
 * 2.@Componentvoid 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的创建,是传入了myApplicationProvidersharedPreferencesProvider * 所以MainPresenter里面可以用myApplicationmainPresenter,是注入了的。
 * 不用再在Presenter里面DaggerXXXComponent.builder().build().inject()了。
 * 4.TestClass的实例化表明:要想实例化Presenter,那么presenter里面所有的属性都需要被实例化。不用再Presenter里面做注入操作 * 4.1这里的注入操作是在实例化presenter时,由框架自身实现的。
 *
 */

MVPamrs全家桶的理解


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值