Dagger2概念及使用

1.概念

在Android开发过程中随着应用越来越复杂,每个模块之间的耦合也越来越大,给后期维护带来的成本越来越大。由于Dagger2的出现我们可以大大的解决开发中的耦合问题。

由于Dagger2中大量采用了注解,如果对注解不了解,请先去学习下或点击这里

2.几个重要概念

如下介绍几个基本概念,如果不理解可以结合demo理解,这个demo比较简单,但是一些内容都有,里面使用了dagger2 + mvp

  • Inject用来标注目标类所依赖的属性和这个属性的构造函数

    目标类是实际操作的类,如:Activity引用Presenter,Activity就是目标类,Presenter是需要用Inject来标注的类

  • Component是一个桥梁,一端是目标类,一端是目标类的实例。负责将目标类依赖的实例注入到目标类

  • Module用来解决三方库和构造函数有特定参数的类
  • Provides用来注解在Module中定义的函数,这些函数返回的是三方类、有参数的类(无参数的也可以)和有参数的类的参数类型。

  • Singleton没有创建单例的能力(不是单例),我们只需要保证ApplicationComponent只有一个实例,是Scope自定义注解的一种特例

  • Scope可以理解为将Module和Component统一生命周期,在使用过程中我们一般会自定义Scope

  • dependencies是Component注解的一个属性,可理解为依赖继承,与Java中的继承意义类似

创建实例
1.Inject注解构造函数
2.Module通过Provides注解的函数创建实例
2比1的优先级高

顺序(可以这样理解)
1.Component搜索注入函数inject(inject是官方推荐的名称,其它名称也可以)的目标类
2.在目标类中查找被Inject注解的属性,这些属性是目标类所依赖的
3.Component去Module中查找被Provides注解的方法,通过这些方法生成实例,如果没有对应的方法,再去Inject注解的构造函数中查找

3.编译过程

为对应类创建工厂类的过程步骤如下:

步骤1:查找Module中是否存在创建该类的方法。
步骤2:若存在创建类方法,查看该方法是否存在参数
步骤2.1:若存在参数,则按从步骤1开始依次初始化每个参数
步骤2.2:若不存在参数,则直接初始化该类实例,一次依赖注入到此结束
步骤3:若不存在创建类方法,则查找Inject注解的构造函数,
看构造函数是否存在参数
步骤3.1:若存在参数,则从步骤1开始依次初始化每个参数
步骤3.2:若不存在参数,则直接初始化该类实例,一次依赖注入到此结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值