一直认为,任何框架和理论的诞生,一定是为了解决某种特定或者一类共性的场景,没有任何场景做依托的框架是没有价值的。同理,在项目进行技术选型,框架选择的时候,所选的框架一定是满足使用场景中最方便的框架(请原谅没有使用最佳这个词,每个人对于场景的理解不同,且同一种编程思想,能有多种框架选择,很难说那个是最好的,故使用最方便)。
1.控制反转和依赖注入
学习Dagger2之前首先得弄明白两个概念,控制反转和依赖注入。
来一段百度的说明,不喜勿喷,就当了解下单词是啥意思好了
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
先说一个场景:在写代码的时候常常遇到一种情况,就是需要使用到工具类,工具类里面又会引入其他工具类,但是无法保证某个工具类的构造函数一成不变,可能刚开始是一个无参的构造函数,后面需要变成一个有参的构造函数(最常见的是需要一个Context),这时候是不是需要对所有创建该类对象的代码进行修改了(多态也可以解决这个问题,但是使用的时候要考虑使用哪种构造函数,总是不方便)。
针对这个场景,首先想到的就是要代码解耦,要解耦是否可以设计一个“容器”,通过“容器”一定可以拿到需要的对象,而不去关心它的实现。任何变化,只需要修改容器里的实现方法就行了。乍一看这不就是设计模式里的工厂模式呢,但是他俩不是一个概念,一个是设计思路,一个是设计模式。
场景和思路描述完了,就讲讲控制反转了
控制反转,顾名思义,就是在过去调用者在使用被调用者的时候,通常是调用者主动创建被调用者的实例,而现在改为被调用者的创建工作不再由调用者执行。(这段是网上找的说明,个人认为说白了,就是过去是主动创建,而控制反转是被动获取一个需要的对象,怎么创建的无需使用者关心,基本上是框架来实现,主动变被动了)。
依赖注入就是实现控制反转的一种方式,Dragger2又是实现依赖注入的一种框架。
看着解释云里雾里的, 其实简单讲就是为了实现解耦。
下面讲讲怎么使用Dragger2:
compile"com.google.dagger:dagger:2.14.1"
annotationProcessor"com.google.dagger:dagger-compiler:2.14.1"
在项目中加入上面两句或者下面两句都行
implementation librariesDependencies.dagger
annotationProcessor librariesDependencies.daggerCompiler
加入引用就可以在项目中使用了