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


    目录: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生成如下代码

      

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

      

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

      源码解读:

      

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

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

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

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

      源码:https://github.com/square/dagger (Dagger) https://github.com/google/dagger (Dagger2)

      引入:

    // dagger2
    implementation 'com.google.dagger:dagger:2.23.1'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.23.1'
  • 相关阅读:
    windbg 调试 winform程序(二车间机台程序)
    jquery操作数组的方法
    kafka之consumer参数auto.offset.reset
    常用linux脚本记录
    linux 常用命令总结
    华为S系列交换机配置
    python画冰墩墩
    进程间通信——IPC之共享内存
    ARP绑定IP和MAC的作用
    谷粒商城中renrenfast报错Error creating bean with name 'ossClient'
  • 原文地址:https://www.cnblogs.com/Supperlitt/p/12764629.html
Copyright © 2020-2023  润新知