先导入依赖
compile 'com.google.dagger:dagger:2.7'
annotationProcessor 'com.google.dagger:dagger-compiler:2.7' Dagger2
Dagger2 依赖注入框架 在编译期间自动生成代码,负责依赖对象的创建。
依赖注入
依赖注入是一种面向对象的编程方式,它的出现就是为了降低耦合, 所谓耦合就是类与类之间的依赖关系,降低耦合就是降低类与类之间的依赖关系。·
最简单的依赖注入:有参构造和 set()方法都属于是依赖注入
用dagger2提供依赖有什么好处:为了进一步解耦和方便测试,我们会使用依赖注入的方式构建对象 (不使用 new 来创建依赖对象)。在mvp中,presenter层会持有view和model层的依赖,依赖注入主要用于解耦,通过依赖注入创建对象,不再使用new来创建对象
Dagger2的常用注解:
@Inject:此注解用于告诉Dagger2,我们需要这个类的实例对象。主要用于标记哪个类是需要注入的。
@Module:此注解里面全是方法,用于对外提供对象,自己定义方法,方法上使用@Provides。自定义一个类,以Module结尾,用@Module注解。
@Provides:此注解用于标记方法,表示可以通过这个方法获取一个对象,一般用于自定义类中。
@Component:此注解主要用于关联自定义module类和MainActivity;关联module使用:@Component(modules={UserModule.class});关联Activity,以方法参数的形式传入MainActivity到连接器中
@Named与@Qualifier:用于区别不同对象的实例。必须要成对出现,否则会报错。
@PerActivity:限定对象的生命周期和Activity一样。一般应用于自定义的Component上。
@Singleton:标记为单例模式,如果在自定义Module中使用了此注解,在自定义的Component上也要使用该注解。
用dagger2提供依赖有什么好处:为了进一步解耦和方便测试,我们会使用依赖注入的方式构建对象 (不使用 new 来创建依赖对象)。在mvp中,presenter层会持有view和model层的依赖,依赖注入主要用于解耦,通过依赖注入创建对象,不再使用new来创建对象。
依赖注入的目的是:给你提供一个对象依赖。
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface ActivityScope {
}
@ActivityScope
@Component (modules = CommonModule.class)
public interface CommonComponent {
void inject(GdmapActivity activity); //GdmapActivity是导航Demo的一个Activity
}
@Module
public class CommonModule{
}
Dagger2是对于MVP进行的解耦
他是通过反射的方式来进行的实例化对象