Dagger2使用的简单介绍

时间:2024-03-30 15:06:15

**

Dagger2使用的简单介绍

**
Dagger2是通过注解来实现依赖注入的,主要有6种注解:@Inject、@Provide、@Module、@Component、@Scope和@Qulifier
一、四个基础注解

  1. @Inject
    Inject主要有两个作用,一个是使用在构造函数上,通过标记构造函数让Dagger2来使用(Dagger2通过Inject标记可以在需要这个类实例的时候来找到这个构造函数并把相关实例new出来)从而提供依赖,另一个作用就是标记在需要依赖的变量让Dagger2为其提供依赖
    @Inject给一个类的相应属性做标记时,说明它是一个依赖的需求方,需要一些依赖
    @Inject给一个类的构造函数做标记时,表明它能提供依赖的能力
  2. @Provide
    用Provide来标记一个方法,该方法可以在需要的时候提供依赖时被调用,从而把预先提供好的对象当做依赖给标注了@Inject的变量赋值,Provide主要用于标注了@Module里的方法。
  3. @Module
    用Module标注的类是专门用来提供依赖的。Module可以给不能修改源码的类提供依赖,当然,能用Inject标注的通过Module也可以提供依赖。
  4. @Component
    Component一般用来标注接口,被标注了Component的接口在编译时会产生相应的类的实例来作为提供依赖方和需要依赖方之间的桥梁,把相关依赖注入到其中。

Dagger2使用的简单介绍

二、@Inject和@Component的配合使用
Dagger2使用的简单介绍
Dagger2使用的简单介绍
Dagger2使用的简单介绍
在上面的栗子中,ZhaiNan类中是需求方,Baozi和Noodle是它的依赖。@Component接口如下。
Dagger2使用的简单介绍
Dagger2会自动生成@Component标注的接口的实现类,对工程进行编译后后得到实现类DaggerPlatform(命名规则为Dagger+接口名称)。
使用Dagger2进行代码依赖注入的使用方式如下栗子所示。
Dagger2使用的简单介绍
三、@Provides和@Module
@Inject只能标记在自己编写的类的构造方法中,对于第三方的库或者标准库的话,Dagger2提供了@Provides和@Module两种注解用于对第三方库中的类进行依赖注入
Dagger2使用的简单介绍
Dagger2使用的简单介绍
Ps:@Provides修饰的方法一般用provide作为方法的前缀;@Module修饰的类一般用Module作为后缀。
@Component是依赖双方的联系枢纽,与@Module配合使用如下。
Dagger2使用的简单介绍
四、@Provides用法详解
Provides注解的提供依赖的方法有两种用法,一种是直接在方法中new,一种是直接返回传入的参数。
Dagger2使用的简单介绍
对于被@Inject注解过构造方法或者在一个Module中的被@Provides注解的方法提供了依赖时,可以直接返回传入的参数;而第三方的库或者SDK自带的类就必须手动创建
五、Module的创建
如果一个Module没有实现任何构造方法,Component中Dagger2会自动创建,如果这个Module实现了有参的构造方法,那么它就需要在Component构建的时候手动传递进去,方法如下。
Dagger2使用的简单介绍
六、内部具有@Inject注解的属性但是没有依赖绑定的类对象进行依赖注入方法
在Android中,MainActivity对象的创建是由AndroidFramework框架决定的,但是编写者可以给Activity相应的属性添加@Inject注解。
Dagger2提供了针对这种内部拥有@Inject标注的属性,但还没有进行依赖绑定的类的对象进行依赖注解的方法
Component中方法除了可以返回类型,还可以在方法中传入类型参数,目的是针对这个参数对象进行依赖注入。
Dagger2使用的简单介绍
Dagger2使用的简单介绍
七、@Inject和@Provides优先级
Dagger2使用的简单介绍
Dagger2使用的简单介绍
Dagger依赖查找的顺序是先查找Module内所有的@Provides提供的依赖,如果查找不到再去查找@Inject提供的依赖。
PS:其他注解见博客或官方文档
Dagger2使用的简单介绍

资料参考博客:轻松学,听说你还没有搞懂Dagger2
依赖注入神器:Dagger2详解系列
Google官方github项目地址:Dagger2的Github官方文档