美文网首页Android-Dagger2dagger2入门到不放弃
Dagger2的使用与分析(1)--Inject

Dagger2的使用与分析(1)--Inject

作者: saygoodbye_e92e | 来源:发表于2019-04-01 18:18 被阅读24次

进入DaggerCarComponent类查看:

内部采用建造者模式来构建刚才上面我们自定义的接口CarComponent的实例,

内部通过构造函数来实例化DaggerCarComponent,我们来看一下这个构造函数

从上图可以得出:

 (a)构造函数内部调用 initialize(builder);

   (b)可以发现DaggerCarComponent.builder().build()

       其实也可以用DaggerCarComponent.create()

我们接着分析(a)中initialize(builder); 我们进入该函数内部

初始化也就是要获取 MembersInjector<MainActivity>这个属性的值

进入源码查看:MembersInjector

什么意思呢?将依赖项注入类型的实例的字段和方法中,

换言之,泛型T就是那个类型,也就是将依赖注入到T的字段或者方法中

,对应到我们这里就是将依赖注入到MainActivity的字段或者方法中。

接着我们看看,这个

this.mainActivityMembersInjector = MainActivity_MembersInjector.create(Car_Factory.create());

这个MainActivity_MembersInjector类

分析:(a)create方法,创建MainActivity_MembersInjector实例

        (b)MainActivity_MembersInjector构造函数,获取Provider<Car>的实例

           (3)注意到injectMembers和injectMCar这两个函数了吗,这个在哪里会用到呢,我往后看

DaggerCarComponent这个类中

关键点

injects函数中调用了

mainActivityMembersInjector.injectMembers(mainActivity);

而DaggerCarComponent实现了CarComponent,所以这里就指的是

DaggerCarComponent.create().injects(this);中的inject(this)

那我们接着来细看

   mainActivityMembersInjector.injectMembers(mainActivity);

有没有很激动,发现了吗,就是在这里,instance.mCar =mCarProvider.get();

这里的instance就是MainActivity,此处就是给MainActivity中的成员变量赋值的过程。

那么我们带着好奇看看这个

mCarProvider.get()到底是如何获取MainActivity成员变量的值呢

进入Provider<Car>

这个是一个典型的“饿汉式”的单例模式

我们来看一下Factory<Car>这个接口

到这里你可能就明白了.

我们再来会看一下:DaggerCarComponent中

this.mainActivityMembersInjector = MainActivity_MembersInjector.create(Car_Factory.create());

看下图:

一切都是那么的丝滑。

总结:整体思想是面向接口编程,依赖倒置(DI)和IOC的思想。然后利用apt来自动生成我们需要的代码

相关文章

  • Dagger2的使用与分析(1)--Inject

    进入DaggerCarComponent类查看: 内部采用建造者模式来构建刚才上面我们自定义的接口CarCompo...

  • Dagger2

    Dagger2 @Inject Declaring Dependencies Use @Inject to ann...

  • Dagger2使用详解

    Dagger2注解 Dagger2使用过程中我们通常接触到的注解主要包括:@Inject, @Module, @P...

  • dragger2新了解

    @Inject 构造器注入,@Inject标注在构造器上其实有两层意思。 ①告诉Dagger2可以使用这个构造器构...

  • Dagger2在SystemUI中的应用

    Dagger2注解基础 @Inject和@Component 用 @Inject 注解标注目标类中依赖类的实例对象...

  • Dagger2 中的 Qualifier

    Dagger2 中创建实例对象有两种方式: Inject 维度:通过用 Inject 注解构造函数 Module ...

  • Dagger2入门探索

    在开始使用Dagger2之前有些概念还是要弄清楚的,主要就是Inject,Component,Module,Pro...

  • 有关Dagger2的一些事(一)

    这是为Dagger2的详细分析第一篇,以做记录。此篇介绍以下内容: @Inject @Component @Mod...

  • Dagger2

    dagger2的GitHub地址 优秀的小白入门博客 大神的dagger2详解博客 只有Inject的模式 act...

  • Dagger2

    Dagger2注解 @Inject: 用来标记需要依赖的变量,以此告诉Dagger2为它提供依赖; 是用来标记构造...

网友评论

    本文标题:Dagger2的使用与分析(1)--Inject

    本文链接:https://www.haomeiwen.com/subject/plivbqtx.html