(1)引入依赖库
(2) 创建Moudule
(3)创建具体的示例
(4)创建一个Component
(5)Rebuild Project
然后AS 会自动帮我们生成一个
开头都是以Dagger开始的
(6) 将Component与Activity/Fragment绑定关系
接下来再举一个例子,详解怎么利用 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学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!