zoukankan      html  css  js  c++  java
  • 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'
  • 相关阅读:
    Apache 2.4+php 5.4 安装
    Linux 进程状态
    解决Redhat Linux AS使用yum时出现This system is not registered with RHN的问题(改用CentOS的yum)
    nagios 事件处理
    awk调用shell命令的两种方法:system与print
    磁盘性能分析
    如何通过JQuery将DIV的滚动条滚动到指定的位置
    GCC Windows Linux 下编译学习1
    Linux命令
    GCC Windows Linux 下编译学习2
  • 原文地址:https://www.cnblogs.com/Supperlitt/p/12764629.html
Copyright © 2011-2022 走看看