热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Dagger2系列(二)基础篇:基本功能的实现

Dagger2该系列博客的最终目标:搭建MVP+Dagger2框架该系列博客包含以下几篇内容:Dagger2系列(一)—前奏篇:基本概念介绍Dagger2系列(二)—基础篇:基本功

《Dagger 2 系列(二) -- 基础篇:基本功能的实现》 Dagger2

  • 该系列博客的最终目标: 搭建 MVP + Dagger2 框架
  • 该系列博客包含以下几篇内容:
    1. Dagger 2 系列(一) — 前奏篇:基本概念介绍
    2. Dagger 2 系列(二) — 基础篇:基本功能的实现

在这篇文章中你会看到什么:

  • @Inject 是什么
  • @Component 是什么
  • @Inject 和 @Component 如何协同作战。

1. 前提

在介绍他们之前我们来看一段我们在项目中看到的类似的代码:

public class ClassA{
ClassB classB = new ClassB();
ClassC classC = new ClassC("xxx",xxx);
.....
}

如你所见,当我们在目标类初始化其他类时,这些工作几乎都是重复性的操作,我们可不可以用一种方案来替代这种操作,这时我们所使用的 Dagger2 的成员 @Inject@Component 就跳出来了,大声喊道:我可以~~~

2. @Inject 是什么?

@Inject为了实现以上功能,需要用注解 @Inject (Annotation)来标注目标类中所依赖的其他类,同样用注解来标注所依赖的其他类的构造函数。

public class ClassA{
@Inject
ClassB classB;
@Inject
ClassC classC;
.....
}
public class ClassB{
@Inject
public ClassB(){}
....
}
public class ClassC{
@Inject
public ClassC(XXX xxx, XXX xxx){
...
}
}

虽然目标类和所依赖类都使用了@Inject 来标记,但是他们并没有产生实在意义上的联系,这时 @Component 就充当了媒婆的角色。

3. @Component 是什么?

很明显@Component 是一个注解,那么被 @Component 标记的类理所当然的被称为注解类,并且该类必须是接口或抽象类。那么下面我们看一下这个媒婆是怎么开展工作的:
1.@Component 标注类的实例必须存在目标类中
2.Component会查找目标类中用 @Inject 注解标注的属性

  1. 查找到相应的属性后,会接着查找该属性对应的用@Inject标注的构造函数(这时候就发生联系了)
  2. 剩下的工作就是初始化该属性的实例并把实例进行赋值
    具体过程如下图:

    《Dagger 2 系列(二) -- 基础篇:基本功能的实现》 @Inject 和 @Component 协同过程流程图

4. 总结

到此为止,我们已经实现了基本的基于Dagger2的依赖注入。下面我们把过程再梳理一遍:

  1. @Inject注解标注目标类中其他类
  2. @Inject注解标注其他类的构造函数
  3. 若其他类还依赖于其他的类,则重复进行上面2个步骤
  4. 调用Component(注入器)的injectXXX(Object)方法开始注入(injectXXX方法名字是官方推荐的名字,以inject开始)

Component 就像目标类相应依赖类的媒介,把目标类依赖的实例注入到目标类中,来初始化目标类中的依赖。

参考文章

Dagger 详解
Dagger2 入门实践
Android:dagger2让你爱不释手-基础依赖注入框架篇
Android:dagger2让你爱不释手-终结篇
最简单的Dagger2入门教程
这就是Dagger2


推荐阅读
  • 1.在gradle中添加依赖在主项目的build.gradle中添加Dagger2库的依赖dependencies{compilecom.google.dagger:dagger: ... [详细]
  • 推荐:看到如此多的MVP+Dagger2+Retrofit+Rxjava项目,轻松拿star,心动了吗?看到身边的朋友都已早早在项目中使用这些技术,而你还不会,失落吗?MVPArm ... [详细]
  • 高级工程师_免费Android高级工程师学习资源,内容太过真实
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了免费Android高级工程师学习资源,内容太过真实相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Uberlicenseforandroidlist:1.ButterKnife:项目地址:https:github.comJakeWhartonbutterknife这个开源库可以 ... [详细]
  • dagger2简单使用与理解笔记
    文章目录使用dagger2好处具体案例查看github1.使用dagger2注入基本使用流程概念2.dagger2中各种注解基本使用引入dagger20.写两个对象用来实际操作的1 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文总结了在使用Ionic 5进行Android平台APK打包时遇到的问题,特别是针对QRScanner插件的改造。通过详细分析和提供具体的解决方法,帮助开发者顺利打包并优化应用性能。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • Android:dagger2让你爱不释手-基础依赖注入框架篇AndroidDagger2MVP架构一看就明白Dagger2教程六之Component的组织方法&#x ... [详细]
  • 安卓ndk开发!高级Android晋升之View渲染机制,附答案
    缘起深圳市腾讯计算机系统有限公司成立于1998年11月,是中国最大的互联网综合服务提供商之一,也是中国服务用户最多的互联网企业之一。腾讯业务多元化& ... [详细]
  • [单机游戏]《暗黑破坏神》V1.10细节介绍 [转载自2003年12期电脑迷]
    《暗黑破坏神》V1.10细节介绍    2003年10月28日,暴雪(Blizzard)终于发布了《暗黑破坏神II(DiabloII)》最新更新档PatchV1.10 ... [详细]
  • 开发笔记:Dagger2 探索记3——两大进阶组件
        今天要讲的时@Scope这个组件。为什么说它是进阶组件,就是因为它基本上没作用,但在理解了基本组件之后又必须用到。 ... [详细]
  • Android Studio中使用apt
    AndroidStudio中使用apt一、前言你还在对着枯燥的重复代码一味复制粘贴吗?这样跟搬砖有何区别?你是否曾想过:你用代码编写出一个自动化的APP,但为何代码本身却缺少了活力 ... [详细]
author-avatar
天雨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有