##Dagger2介绍
Dagger是为Android和Java平台提供的在编译时进行依赖注入的框架。
什么是依赖注入:
依赖注入是面向对象编程的一种设计模式,其目的是为了降低程序耦合,这个耦合就是类之间的依赖引起的。
我们在一个类classA中,需要去调用另一个类classB的方法,我们就在类classA中直接创建了另一个类classB的实例,然后直接通过classB的实例去调用方法,表明,表面上看上去没毛病,但是,我们会明显的感觉到不适,就是耦合度太强。
以上这种在classA中创建classB的实例,是对象注入的一种。
我们还有很多以来注入方式来实现解耦:
- 通过接口注入
比如我们要想调用哪个方法,直接通过实现该声明该方法接口来完成。 - 通过set方法来注入
就是通过观察者模式的方式,比如回调监听,Android中为Button设置监听 - 通过构造方法传入
- 通过注解的方式
** Dragger2就是通过注解的方式来把实例注入到宿主类中 **
Dagger2的使用
####添加Dagger2的依赖
compile 'com.google.dagger:dagger:2.x'
####编译时生成代码的插件配置
- 在project的gradle中添加
buildscript {
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
- apt插件的使用
modle的gradle中添加
apply plugin: 'com.neenbedankt.android-apt'
- 关联Dagger2
dependencies {
apt 'com.google.dagger:dagger-compiler:2.6'
}
代码中的体现
以前在写MVP中曾经留下问题,就是Activity中需要去调用Presenter层中的业务逻辑方法,须在Activity中创建P层实例对象,这样V层和P层中还会存在耦合。现在继续借助Dagger2来把Pressenter实例对象注入到Activity中,来实现P层和V层解耦操作。
我用一个登录操作来说明,在V层,有俩个输入框,一个按钮,在P层有个login()方法。
我们以前是这样处理的:
现在,我们需要注释掉这句代码
然后在