解耦和方式
1、利用配置文件,使用反射获取到需要加载的对象。
2、设计模式:单例、工厂、观察者……
Dagger2简介
1、什么是Dagger2?
Dagger是为Android和Java平台提供的在编译时进行依赖注入的框架。
编译时:编辑时生成代码(rebulid),我们完成所需对象的注入。(假设使用反射,应该是运行时起作用)。
2、为什么使用Dagger2?
Dagger2解决了基于反射带来的开发和性能上的问题。
一、引入配置
1、添加dagger2的依赖
compile'com.google.dagger:dagger:2.6'//dagger公用api
apt'com.google.dagger:dagger-compiler:2.0.2'//指定注解处理器
provided'org.glassfish:javax.annotation:10.0-b28'//添加android缺失的部分javax注解
2、编译时生成代码的插件配置(android-apt)
project的gradle中添加
buildscript{
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
apt插件的使用
modle的gradle中添加
applyplugin: 'com.neenbedankt.android-apt'
关联Dagger2
dependencies {
apt 'com.google.dagger:dagger-compiler:2.6'
}
操作步骤
目标:替换掉presenter = new MainActivityPresenter(this);
第一步:指定要注入的目标
@Inject
MainActivityPresenterpresenter;
第二步:将new MainActivityPresenter(activity)代码放到指定的方法中
@Module
public classMainModule {
privateMainActivityactivity;
publicMainModule(MainActivity activity) {
this.activity= activity;
}
@Provides
publicMainActivityPresenterprovideMainActivity() {
return newMainActivityPresenter(activity);
}
第三步:建立activity和module建立关系(=)
@Component(modules= MainModule.class)
public interfaceMainActivityComponent {
voidin(MainActivity activity);
}
第四步:Rebuild Project
第五步:
DaggerMainActivityComponent component = (DaggerMainActivityComponent) DaggerMainActivityComponent.builder()
.mainModule(newMainModule(this))
.build();
component.in(this);
深入理解Dagger:
在操作中会使用到@Inject、@Module、@Provides、@Conponent注解,那么他们分别在完成什么工作?
MainActivityPresenter presenter = new MainActivityPresenter(this);
@Inject @Conponent @Module @Provides