欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2022-03-26 19:46:05
目录:andorid jar/库源码解析 Dagger、Dagger2: 作用: 1、用于解耦Activity和业务逻辑 2、在使用业务的时候,不需要重复编写new代码。 3、当业务变化的时候,不需要对所有的UI,进行修改。 4、便于测试,和正式,替换指定Module即可。 栗子: 需要: 1、定义 ......

目录:andorid jar/库源码解析 

dagger、dagger2:

  作用:

  1、用于解耦activity和业务逻辑

  2、在使用业务的时候,不需要重复编写new代码。

  3、当业务变化的时候,不需要对所有的ui,进行修改。

  4、便于测试,和正式,替换指定module即可。

  栗子:

  需要:

    1、定义 commoncomponent 的接口 标记 @component(modules = xxxmodule.class) 的注解

    2、定义xxxmodule 模块,并标注  @module 的注解 ,对添加的方法使用 provide开头,这些 provide方法需要添加 @provides注解

  a业务类:

  构造函数使用 @inject 注解

  b页面:

  1、定义a业务类的变量,使用@inject注解

  2、在oncreate中,使用如下代码进行初始调用

daggercommoncomponent.builder().commonmodule(new commonmodule(this)).build().inject(this);

  3、daggercommoncomponent由,使用dagger自动生成的类(dagger使用apt技术实现),使用apt生成如下代码

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

  4、然后就可以使用了。。。。

  源码解读:

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

  ①:创建一个 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'