如果你想成为Android高级架构师,千万记得要学好Dagger2

三、如何使用Dagger2


(1)引入依赖库

(2) 创建Moudule

在这里插入图片描述

(3)创建具体的示例

在这里插入图片描述

(4)创建一个Component

在这里插入图片描述

(5)Rebuild Project

然后AS 会自动帮我们生成一个

开头都是以Dagger开始的

(6) 将Component与Activity/Fragment绑定关系

在这里插入图片描述

四、 Dagger2高级用法之多 Module 实战


接下来再举一个例子,详解怎么利用 Dagger 构建多 Module 依赖关系,从而实现组件化。这里,将上述对 Activity 和 Fragment 的依赖注入分离到一个 Library Module 中,利用 Application.Activity Life cycle Call backs 和Fragment Manager.Fragment Life cycle Call backs 监听,构建全局的依赖注入。这里提前提一下本方案下,Dagger 的依赖关系:Dagger Component -> App Component->Main Activity Subcomponent/Main Fragment Subcomponent其中:Dagger Component 为 library 的注入器,它的作用域是 @Singleton;AppComponent 为主 Module 的全局注入器,它的作用域@AppScope,并且 App Component 是依赖于 Dagger Component,也就是说,Dagger Component 顶级注入器,AppComponent 是主 Module 的注入器;Main Activity Subcomponent/Main Fragment Subcomponent 是 Activity/Fragment 的注入器,作用域为 @ActivityScope/@Fragment Scope,这里是 @Subcomponent,通过继承的方式实现层级依赖,为 App Component 的下一级。

App Scope

在这里插入图片描述

4.1 Library Module

4.1.1 Dagger Fragment LifecycleCall backs - 全局 Fragment 依赖注入

这里使用 Fragment Life cycle Call backs 全局监听 Fragment 的生命周期,对 Dagger.Android 进行统一注入管理。

Dagger Fragment Life cycle Call backs

在这里插入图片描述

可以看到,Dagger Fragment Life cycle Call backs 也是通过 Dagger 进行管理的,在 on Fragment Attached() 方法中进行 Fragment 的依赖注入;并且使用 Timber 打印了几个关键生命周期回调Log。

4.1.2 Dagger Activity Life cycle Call backs - 全局 Activity 依赖注入

这里使用 Activity Life cycle Call backs 全局监听 Activity 的生命周期,对 Dagger.Android 进行统一注入管理。

Dagger Activity Life cycle Call backs

在这里插入图片描述

在这里插入图片描述

4.1.3 Dagger Component - 顶级注入器

Dagger Component

在这里插入图片描述

4.1.4 Dagger Delegate - 开始注入

Dagger Delegate

在这里插入图片描述

这里的 Dagger Delegate 是一个代理类,为了克服 Application 继承的问题,通过封装一个代理类来对 library 的 Dagger 注入进行管理,然后在需要的 Module 里使用。至此,Library Module 的依赖注入结构搭建完成。

4.2 App Module

由上一大节可知,Library Module 中是没有 Application 的,它是一个 library,如果想使用它,需要在 主 Module 中进行依赖。再说一遍,DaggerComponent 是顶级注入器,AppComponent 主 Module 的全局注入器,它仅限定于 @AppScope。

首先在 app/build.gradle 中添加上节中的 Library Module 依赖:

在这里插入图片描述

4.2.1 App Component - 主 Module 的全局注入器

App Component

在这里插入图片描述

可以看到,dependencies = Dagger Component.class,这就是上文所说的:App Component 是依赖于 Dagger Component,也就是说,Dagger Component 顶级注入器,App Component 是主 Module 的注入器。其中,App Module 主要提供主 Module 的一些全局依赖,可自行扩展。

App Module

在这里插入图片描述

4.2.2 Main App - 真正注入的地方

Main App

在这里插入图片描述

Main App 是真正进行依赖注入的地方,首先使用上一节 Library Module 中的 Dagger Delegate 进行顶级依赖注入,然后进行 主Module 的依赖注入。需要注意的是,Main App 必须实现 Has Activity Injector 接口,才能进行 Dagger.Android 注入。

最后不要忘记在 Android Manifest.xml 中指定 Main App 。

4.2.3 Main Activity Module/Main Fragment Module

由第一节的例子可知:当 Subcomponent 和 它的 Builder 没有其它方法或超类型时,可以不再需要手写 Subcomponent,而是通过 @Contributes Android Injector 注解来自动生成。所以,这里的 Main Activity Subcomponent/Main Fragment Subcomponent 可以省略;这样,Main Activity Module/Main Fragment Module 如下:

Main Activity Module

在这里插入图片描述

Main Fragment Module

在这里插入图片描述

结语

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!以下是目录截图:

由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。

再附一部分Android架构面试视频讲解:


《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
展示 。

再附一部分Android架构面试视频讲解:

[外链图片转存中…(img-uQmZzo5W-1715248284581)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值