Dagger2学习之路(Part 1)

本文就记录本人学习Dagger2时的一些问题或者理解。
至于关于Dagger2是什么啊,做什么用的啊,巴拉巴拉。我就不在此赘述了。

不过得吐槽一句,由于本人英文不是很好,在没有任何该知识基础的情况看英文文档很吃力,所以不得不看国内的相关博客,不过最开始找了好久,很多看起来都没有感觉,其内容泛泛而谈,缺少源码实例。(当然了,这纯属吐槽,毕竟有些博客也是别人自己一字一字码出来的)。


最开始入门时,有幸发现了一篇很赞的文章,学习完之后也算是入门了。(学习自:使用Dagger 2进行依赖注入
这篇文章里面就Dagger2中的@Module@Provides@Component三个注释的使用举出了通俗易懂的源码实例,让人一看就能对此有了直观的了解。

好了,在开始使用dagger2之前呢,需要先配置好Gradle,这里可以参观官方的,是最准确的。
这里写图片描述
另外,可能还需要在module的build.gradle下添加如下依赖,否则会在编译报错,如下图:

compile 'javax.annotation:javax.annotation-api:1.2'

这里写图片描述

(也许是跟下图中配置的版本有关,这点我没有深究了)
这里写图片描述

接着,就可以跟着文章撸代码了。(可以在这里直接clone我的,为了直观的了解,我将自己撸的示例分成了test1、test2两部分,即分别对应文中的简单的依赖注入多层依赖


准备好之后,我就得注入一点自己的观点或者理解了。

1、在简单的依赖注入中,需要在MainActivity中注入一个UserModel的实例,首先就需要一个依赖模块,为了直观,我命名成了MainActivityMoudle(被@Module标识了),里面就有一个被@Provides标识的方法provideUserModel(),该方法返回一个目标实例,当然了,这个方法名是可以随便命名的,只要符合Java的命名规则即可,但是一定得有@Provides标识。

2、接着就需要一个“注入器”(即Injector,但是在Dagger2中,将其称为Component。)将实例注入到指定的依赖中(在本例中即MainActivity)。在构建Injecyor时的注意事项在文中已经说得很清楚了,我就不再复述,只是提醒大家一定得注意了。 我在这里要说的是,注入方法inject()的方法名也是可以自定义的,只需要在调用的时候调用正确的方法名即可。

3、在注入时,会用到Dagger自动生成的相应的Component类(在使用前一定要将项目ReBuild一遍,才会生成该类),在我的Demo中为DaggerMainActivityComponent(因为我在构建Injector为MainActivityComponent)。在这里,就可以很直观的看到命名规律:Dagger+定义的Component名。还有在builder()方法后链式引用了mainActivityModule()方法,其参数就是相应的Module,这里的mainActivityModule()方法的命名也是有规律的,即对应的Module名,首字母小写即可。

4、被注入的实例的引用需要用@Inject标识,且不能为private,并@Inject不能标识局域变量。需要多少个实例,就用@Inject表示相应数量的引用变量即可。
这里写图片描述

5、至于多层依赖,也比较容易理解,只要解读一下文章与实例代码即可。
但是要注意,在多层依赖时,因为使用了MainActivityComponent作为低级Component来提供依赖,原本MainActivityComponent中的inject()方法需要去掉,注意,是去掉,而不是与UserModel userModel()共存,否则是无法ReBuild的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值