最近在研究Dagger2,他是为了配合MVP出现的,为了让你的业务逻辑完全的与界面隔绝开,让代码完全解耦。
一、Dagger2简介
1、首先看看什么是Dagger2:
Dagger是为Android和Java平台提供的在编译时进行依赖注入的框架。编译时:编辑时生成代码(rebulid),我们完成所需对象的注入。
2、为什么是使用Dagger2
Dagger2解决了基于反射带来的开发和性能上的问题。
3、Dagger2做什么工作
Dagger2主要用于做界面和业务之间的隔离。
二、Dagger2的使用
1、引入配置:
- 添加Dagger2的依赖 compile ‘com.google.dagger:dagger:2.6’
- 编译时生成代码的插件配置(android-apt)
//project的gradle中添加
buildscript {
dependencies {
classpath
.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'
}
2、操作步骤
- 第一步 在Activity中的配置 使用@Inject注解
@Inject
HomePresenter homePresenter;
- 第二步 创建Module 分别使用@Module和@Provides注解
package ledon.com.retrofitdemo.dragger;
import dagger.Module;
import dagger.Provides;
import ledon.com.retrofitdemo.presenter.HomePresenter;
import ledon.com.retrofitdemo.presenter.impl.HomePresenterImpl;
import ledon.com.retrofitdemo.view.HomeActivity;
import ledon.com.retrofitdemo.view.HomeView;
//dagger2使用 第二步
@Module
public class HomeActivityModule {
HomeActivity activity;
public HomeActivityModule(HomeActivity activity) {
this.activity = activity;
}
@Provides
HomePresenter provideHomeActivityPresenter(){
return new HomePresenterImpl(activity);
}
}
- 第三步 创建接口类使用@Component注解
package ledon.com.retrofitdemo.dragger;
import dagger.Component;
import ledon.com.retrofitdemo.view.HomeActivity;
//dagger2使用 第三步
@Component(modules = HomeActivityModule.class)
public interface HomeActivityComponet {
void in(HomeActivity activity);
}
- 第四步 在AS中rebulid一下,生成Dagger2依赖注入的代码
- 第五步 在Activity中
DaggerHomeActivityComponet componet = (DaggerHomeActivityComponet) DaggerHomeActivityComponet.builder()
.homeActivityModule(new HomeActivityModule(this))
.build();
componet.in(this);
homePresenter.getVideo();
到此集成Dagger2的所有步骤就已经完成了,在界面view视图里看不到业务逻辑的代码,解耦完全。
在操作中会使用到@Inject、@Module、@Provides、@Component注解,那么他们分别在完成什么工作?
HomeActivityPresenter presenter = new HomeActivityPresenterImpl(this);
@Inject @Component @Module @Provides