Dagger 使用入门

前一阵子项目里使用到Dagger,一直没时间整理,现在就整理一下Dagger的使用。

一、Dagger是什么

        Dagger是现在由Google维护的一套依赖项注入框架,那什么是依赖注入呢?引用Google的话:

类通常需要引用其他类。例如,Car 类可能需要引用 Engine 类。这些必需类称为依赖项,在此示例中,Car 类依赖于拥有 Engine 类的一个实例才能运行。

类可通过以下三种方式获取所需的对象:

  1. 类构造其所需的依赖项。在以上示例中,Car 将创建并初始化自己的 Engine 实例。
  2. 从其他地方抓取。某些 Android API(如 Context getter 和 getSystemService())的工作原理便是如此。
  3. 以参数形式提供。应用可以在构造类时提供这些依赖项,或者将这些依赖项传入需要各个依赖项的函数。在以上示例中,Car 构造函数将接收 Engine 作为参数。

第三种方式就是依赖项注入!使用这种方法,您可以获取并提供类的依赖项,而不必让类实例自行获取。

      举个例子:

class Car {

    private final Engine engine;

    public Car(Engine engine) {
        this.engine = engine;
    }

    public void start() {
        engine.start();
    }
}

class MyApp {
    public static void main(String[] args) {
        Engine engine = new Engine();
        Car car = new Car(engine);//可以看到Car在构造的时候,注入了engine
        car.start();
    }
}

目前Android中,其实也是java中,有两种主要的依赖项注入方式:

  • 构造函数注入。这就是上面描述的方式。您将某个类的依赖项传入其构造函数。

  • 字段注入(或 setter 注入)。某些 Android 框架类(如 Activity 和 Fragment)由系统实例化,因此无法进行构造函数注入。使用字段注入时,依赖项将在创建类后实例化

二、Dagger中常用Api及其作用了解

@Inject  //用来告知Dagger,如何构造一个类

  
    @Inject
    public A(B b, C c) {
        this.b= b;
        this.c= c;
    }

在上面的代码段中,我们告诉 Dagger:

  1. 如何使用带有 @Inject 注释的构造函数创建 A实例。

  2. 它的依赖项为:B和 C

接下来我们需要告知Dagger怎么创建依赖项B和C:

public class C{
    @Inject
    public C() { }
}

public class B{
    @Inject
    public B() { }
}

@Component    //用来绘制我们添加@Inject的对象的逻辑关系图,这样Dagger就可以我们生产实现依赖关系的代码了

@Component
public interface ApplicationComponent {
  
    A callA();

}

rebuild之后,代码已经生成了,我们使用A怎么使用呢?

ApplicationComponent application = DaggerApplicationComponent.create();
A a = application.callA();

未完。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值