andorid jar/库源码解析之Dagger/Dagger2
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'
andorid jar/库源码解析之Dagger/Dagger2的更多相关文章
- andorid jar/库源码解析之Bolts
目录:andorid jar/库源码解析 Bolts: 作用: 用于链式执行跨线程代码,且传递数据 栗子: Task.call(new Callable<Boolean>() { @Ove ...
- andorid jar/库源码解析之EventBus
目录:andorid jar/库源码解析 EventBus: 作用: 用于不同Activity,Service等之间传递消息(数据). 栗子: A页面:onCreate定义 EventBus.ge ...
- andorid jar/库源码解析之okhttp3
目录:andorid jar/库源码解析 Okhttp3: 作用: 用于网络编程(http,https)的快速开发. 栗子: // okHttpClient定义成全局静态,或者单例,不然重复new可能 ...
- andorid jar/库源码解析之okio
目录:andorid jar/库源码解析 Okio: 作用: 说白了,就是一个IO库,基于java原生io.来进行操作,内部做了优化,简洁,高效.所以受到了一部分人的喜欢和使用 栗子: 读写文件. p ...
- andorid jar/库源码解析之retrofit2
目录:andorid jar/库源码解析 Retrofit2: 作用: 通过封装okhttp库,来进行web通讯,并且使用动态代理的方式,来调用接口地址,通过回调赋值结果. 栗子: 定义一个接口,用于 ...
- andorid jar/库源码解析之Butterknife
目录:andorid jar/库源码解析 Butterknife: 作用: 用于初始化界面控件,控件方法,通过注释进行绑定控件和控件方法 栗子: public class MainActivity e ...
- andorid jar/库源码解析之zxing
目录:andorid jar/库源码解析 Zxing: 作用: 生成和识别,二维码,条形码. 栗子: 生成二维码,赋值到ImageView上 QRCodeWriter qrCodeWriter = n ...
- andorid jar/库源码解析之错误提示
目录:andorid jar/库源码解析 错误: 错误1: Error: Static interface methods are only supported starting with Andro ...
- andorid jar/库源码解析
前言 本篇作为开篇,会大体上说明,需要解读源码的,类库,或者jar. 序 原本,类库和jar的系列准备写到逆向系列课程的,但是那个东西,在写了两篇,就没有后续了,现在也不知道从哪里开始了, 只能等后期 ...
随机推荐
- Java中的垃圾回收算法详解
一.前言 前段时间大致看了一下<深入理解Java虚拟机>这本书,对相关的基础知识有了一定的了解,准备写一写JVM的系列博客,这是第二篇.这篇博客就来谈一谈JVM中使用到的垃圾回收算法. ...
- 2、使用断言(json assertion)
1.假设现在有一个服务端的返回数据(需要测试的)为:HTTP/1.1 200 OK,要测试的响应字段勾选Response Headers,模式匹配规则选择Substring,把该响应断言命名为Http ...
- three.js - 一个javascript 3D代码库
这个项目的目的是用最简单的开发模式创建一个轻量级的3 d代码库,这个js库提供了canvas,svg,css3d和webgl这四种渲染方式. 下载地址: 下载地址:https://github.com ...
- F - Bone Collector
Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like ...
- layui.laytpl 模板引擎用法
目录 layui下载地址: 最终效果: 模板引擎文档 手册地址: 以下是代码思路: layui下载地址: https://www.layui.com/ 最终效果: 模板引擎文档 手册地址: https ...
- 嵌入css方式
总体见思维导图 . 嵌入css方式 1 内联式 内联式css样式表就是把css代码直接写在现有的HTML标签中,如下面代码: <p style="color:red"> ...
- 最简单的懒人springcloud之Eureka(服务注册与发现)
本文开发软件是STS,是eclipse为springboot项目而生的一个软件,用这个软件开发spring的项目版本都会自己对应的,话不多说直接上代码 springboot版本2.1.8.RELEAS ...
- xpath进阶用法
一.简介 xpath作为对网页.对xml文件进行定位的工具,速度快,语法简洁明了,在网络爬虫解析内容的过程中起到很大的作用,除了xpath的基础用法之外xpath中还存在着非常之多的进阶用法,本文将对 ...
- PHP的yield是个什么玩意
来源:https://segmentfault.com/a/1190000018457194 其实,我并不是因为迭代或者生成器或者研究PHP手册才认识的yield,要不是协程,我到现在也不知道PHP中 ...
- PHPSTORM快捷键On Mac
Command+Shift+O快捷定位文件,需要输入文件名称 Command+鼠标左键点击方法,快捷转到方法实现 Command+Option+方向左键,快捷返回上一步跳转方法之前 Shift+F6统 ...