andorid jar/库源码解析之Dagger/Dagger2

目录:andorid jar/库源码解析 html

Dagger、Dagger2:

  做用:

  一、用于解耦Activity和业务逻辑ide

  二、在使用业务的时候,不须要重复编写new代码。函数

  三、当业务变化的时候,不须要对全部的UI,进行修改。测试

  四、便于测试,和正式,替换指定Module便可。ui

  栗子:

  须要:this

    一、定义 CommonComponent 的接口 标记 @Component(modules = XXXModule.class) 的注解google

    二、定义XXXModule 模块,并标注  @Module 的注解 ,对添加的方法使用 provide开头,这些 provide方法须要添加 @Provides注解spa

  A业务类:code

  构造函数使用 @Inject 注解htm

  B页面:

  一、定义A业务类的变量,使用@Inject注解

  二、在OnCreate中,使用以下代码进行初始调用

DaggerCommonComponent.builder().commonModule(new CommonModule(this)).build().inject(this);

  三、DaggerCommonComponent由,使用Dagger自动生成的类(Dagger使用APT技术实现),使用apt生成以下代码

  

  编译以后查看APK是下面这样(红色部分为自动生成)

  

  四、而后就能够使用了。。。。

  源码解读:

  

  ①:建立一个 DaggerCommonComponent$Builder对象,用于接收 CommonModule 和返回 CommonComponent的接口对象

  ②:建立一个 CommonModule对象,参数是当前对象,而且赋值CommonModule对象给 DaggerCommonComponent$Builder对象的成员

  ③:检查 CommonModule对象,而且返回一个 DaggerCommonComponent对象。且该对象建立了一个Prodiver对象。且赋值为 新增类 CommonModule_ProvideIcommonViewFactory 继承于Factory(Factory extends Provider),且包含成员CommonModule

  ④:调用DaggerCommonComponent对象的inject并传入当前对象,建立一个 LoginPresenter 对象,而且赋值给this对象的presenter对象(该对象标记过Inject)

  引入:

// dagger2
implementation 'com.google.dagger:dagger:2.23.1'
annotationProcessor 'com.google.dagger:dagger-compiler:2.23.1'
相关文章
相关标签/搜索