参考博客:
Dagger2入门
Dagger2中注解
dagger2从浅入深
依赖注入规则:
我们有两种方式可以提供依赖,一个是注解了@Inject的构造方法,一个是在Module里提供的依赖,那么Dagger2是怎么选择依赖提供的呢,规则是这样的:
步骤1:查找Module中是否存在创建该类的方法。
步骤2:若存在创建类方法,查看该方法是否存在参数
步骤2.1:若存在参数,则按从步骤1开始依次初始化每个参数
步骤2.2:若不存在参数,则直接初始化该类实例,一次依赖注入到此结束
步骤3:若不存在创建类方法,则查找Inject注解的构造函数,看构造函数是否存在参数
步骤3.1:若存在参数,则从步骤1开始依次初始化每个参数
步骤3.2:若不存在参数,则直接初始化该类实例,一次依赖注入到此结束
也就说Dagger2会递归的提供依赖.
注意事项:
- inject方法的参数不能用父类来接收(联系MVPARM中baseActivity 不能多次继承,只能copy一份,自己实现)
- @Inject注解的字段不能是private和protected的(如果一定需要是private和protected的话,可以为该字段书写一个set方法,在该set方法上添加@Inject注解也可以声明)
- 注意编写完Component接口后Dagger2并不会自动创建对应的类,需要我们点击Android Studio中bulid菜单下的Rebulid Poject选项
- Dagger2就会检查该需要类型的有没有用@Inject声明的构造方法,有则用该构造方法创建一个.(其他第三方类,没办法改写构造函数,所以必须module)
- 那我们通过构造函数提供依赖的方式又要怎么声明作用范围呢?答案就是在类名上使用注解标明,切记不要在构造函数上用注解标明,这样是无效的.