依赖注入Dagger2的学习(二)

前面的一记录了一下常用的Annotation接下来开始研究究竟怎么使用Dagger2!!

准备工作

  • 首先在app的build.gradle文件中做如下配置:
dependencies {
     apt 'com.google.dagger:dagger-compiler:2.5'
     compile 'com.google.dagger:dagger:2.5'
}
  • 然后在Project的build.gradle文件中做如下配置
dependencies {
     classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}

上面我们添加了编译和运行库还有apt插件,studio一定不要忘了apt插件,还有就是写完了以后如果有一天打开项目发现Dagger的部分报红,不要慌,build一下就好了

  • 建议大家这么分包
dagger分包
  1. components就是注射器的意思,作用就是注入
  2. module 顾名思义,模块的意思,这个包下面的就是我们所有想要提供给注射器的对象
  3. scope 这个包下面规定了一些自定义注解,如上一篇写的@PerActivity @PerFragment 限定注解的作用域为当前Activity的Runtime

接下来到重点了......

首先从scope包开始
@Scope@Retention(RUNTIME) public @interface PerFragment {}
@Scope @Retention(RUNTIME) public @interface PerActivity {}

这是两个自定义注解类,大家都这么写的我就照搬过来了,解释一下,首先@Scope是Dagger2的注解,上面讲过,就不写了,@Retention是java的注解,后面的值给的是RUNTIME,意思就是下面这个注解的作用域是运行时的,假如当前的Activity或者Fragment被销毁了,这个注解就失效了,就会回收注入的对象.(这些只是我自己个人的见解,可能不太正确,有问题的望及时纠正!!!)

然后是module包
@Module
public class AppModule {    
      private final Context context;    
public AppModule(Context context) {        
      this.context = context;    }    
@Singleton    
@Provides
public Context ProvideContext() {
      return context;}  
}

这个是全局的app的实例仓库,这里我们只是提供出去了一个单例的context,你可以在这里往app注入任何你想注入的对象,比如Gson客户端等所有你想注入的!

@Module
public class ActivityModule {
     private final Activity mActivity;
  public ActivityModule(Activity mActivity) {
    this.mActivity = mActivity;  }
  @Provides
  @PerActivity
  public Activity provideActivity() {
    return mActivity;  }
}

这个是ActivityModule的写法,下面的@PerActivity前面也有讲过,就不赘述了,因为假如不用MVP模式进行编写的话这个类里面我们不会过多的些什么,所以等我学了MVP再来补充吧,这里先放下.

@Module
public class FragmentModule {
    private final Fragment mFragment;
    private final Activity activity;
    public FragmentModule(Fragment fragment, Activity activity) {
      this.mFragment = fragment;
      this.activity=activity;    }
   @Provides
   @PerFragment
    public Fragment provideFragment() {
      return mFragment;    }    
@Provides    
@PerFragment
 public Activity provideActivity() {
     return activity;    }
}

FragmentModule:这里我们在运行时往所有注册了的Fragment中注入了一个当前他所依附的Activity的对象,以及当前Fragment的对象,其他的暂时也没有多写.

今天就先写到这里吧,理解理解觉得有点儿懵逼,等我捋一捋清楚了再说吧

你可能感兴趣的:(依赖注入Dagger2的学习(二))