你所看到较轻松的Dagger2(基础介绍)

我之前在网上找了一些dagger2文章,找到非常多的文章,但是大部分都是非常的难懂,对于我这种连依赖注入是什么都不懂的小白而言,然后学习计划就被搁置,当我又准备学习Dagger2时也是花了较大的成本才有了一个较清晰的了解,然而当我了解清除后我觉得花费这么大的时间和难度成本去学习它并不是很成比例因为它本身并不是很复杂的一个东西,那么是什么原因呢,看了很多文章我认为大部分人写文章都很难以一个小白的角度去介绍它,文章里面的专业属于都要理解很久,这造成了学习的成本非常大.

好了,现在开始正式开启Dagger2神秘的大门...

首先我们知道依赖注入这个概念,我们看一下百科解释的一段代码

classA
{
    AInterface a;
    A () {
    }
   AMethod(){//一个方法
   {
   a = new AInterfaceImp();
  }
}

我们知道编码较好的方式一般是接口化编程,因为一般它的耦合度比较轻,为什么呢?比如我们上面的例子, AInterface是一个接口,我们创建一个AInterfaceImp类去实现它,那么我们在其他地方调用AInterfaceImp的方法只需要一个AInterface引用去指向我们实现的具体类,然后去调用AInterface的方法就可以了,这样的好处是当以后我们需要变动AInterface方法的实现方式只需要改变AInterface的引用对象就可以了完全可以不用更改调用者调用的相关代码。

虽然这种方式挺好的,但是你有没有想过,我们最终还是需要在调用者代码里面使用这种方式a = new AInterfaceImp();去创建对象,那么问题来了,如果我改变了AInterfaceImp的构造那么我还要去调用的地方改动相应代码?可能有人会说了,不就是改变一下代码么,a = new AInterfaceImp();变成a = new AInterfaceImp(String str);不是so easy这有什么问题?

不错如果调用的地方只是这么一个那么找到并修改它是so easy,假如我们的业务非常复杂,我们需要创建很多这样的功能,我们又在一个类里面调用了十几个甚至几十个这样对象(别惊讶,google的官方app管理这些调用的代码就有3000多行),那么我们就要创建这么多的对象,那么当我们岂不是要去一一进行更改,这无疑增加了我们的劳动成本,有这些多余的时间我岂不是要留在公司加班而不能去打王者了。。

No,这个时候我们迫切希望有这么一种方式,我可不可以在调用的类里面去申明一个被调用者的成员变量,这个被调用者不需要调用者去生成,它由专门的类去自动生成,我们只需要把调用者对象传给它,当它生成好后就可以把生成好的被调用者对象注入到调用者的成员变量里,这就是所谓的依赖注入。

这种方式自己去实现还是有点麻烦的(好吧我承认我懒),好在早就有人想到这种问题。Dagger1由Square公司受到Guice启发创建,现在经Google接手开发并升级为Dagger2,解决了Dagger1很多不能解决的问题.Dagger就是解决这种问题而诞生的依赖注入框架。

下篇我准备先介绍Dagger2的详细使用在分析具体源码是怎么实现的,敬请关注你所看到最轻松的Dagger2讲解(使用方式)

你可能感兴趣的:(你所看到较轻松的Dagger2(基础介绍))