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的系列准备写到逆向系列课程的,但是那个东西,在写了两篇,就没有后续了,现在也不知道从哪里开始了, 只能等后期 ...
随机推荐
- 34.2 字节流 InputStreamReader OutputStreamWriter
使用方法同字符流,不一样的是数据类型是字节 copydemo public static void main(String[] args) throws IOException { InputStre ...
- Mac配置hosts文件
说明:工作里面有时候会遇到内网办公的环境,需要对使用的IP和地址进行配置到hosts文件内,所以记录一下: 1,Windows配置hosts Windows里面直接打开文件夹,可进行找到system/ ...
- Github上面拉取别人提交的PR
在github上面协同开发,避免不了拉取别的同学的PR,那么如何拉取呢? 1.首先我们看下upstream liz@liz-PC:~/jimeng/handle-api$ git remote -v ...
- 接口 ThreadMXBean 一个很好用的线程管理接口类 可以参考 jdk 帮助文档
概述 软件包 类 使用 树 已过时 索引 帮助 JavaTM Platform Standard Ed. 6 上一个类 下一个类 框架 无框架 所有类 摘要: 嵌套 ...
- Tomcat启动过程原理详解 -- 非常的报错:涉及了2个web.xml等文件的加载流程
Tomcat启动过程原理详解 发表于: Tomcat, Web Server, 旧文存档 | 作者: 谋万世全局者 标签: Tomcat,原理,启动过程,详解 基于Java的Web 应用程序是 ser ...
- python基础:如何使用python pandas将DataFrame转换为dict
之前在知乎上看到有网友提问,如何将DataFrame转换为dict,专门研究了一下,pandas在0.21.0版本中是提供了这个方法的.下面一起学习一下,通过调用help方法,该方法只需传入一个参数, ...
- C - Long Beautiful Integer codeforces 1269C 构造
题解: 这里的m一定是等于n的,n为数最大为n个9,这n个9一定满足条件,根据题目意思,前k个一定是和原序列前k个相等,因此如果说我们构造出来的大于等于原序列,直接输出就可以了,否则,由于后m-k个一 ...
- MVC5+EasyUI+EF6增删改查的演示
一.创建MVC项目 二.引入EasyUI 1.进入easyui官网下载源码 2. 将上述源码中需要的jquery 有选择的加到项目中来 添加Content文件夹,放入easyui代码 三.添加EF, ...
- testlink数据表分析
创建一个项目test node_types: 节点类型,这是一个固定的表 rights: 权限表,用户的操作权限 role_rights: 角色和权限关系表 roles: 角色表 testprojec ...
- 10.添加script标签,判断onload是否完成
class Tools { static loadScript(url, callback) { let old_script = document.getElementById(url); if ( ...