Dagger2 简单入门三部曲(一)——是什么?
Dagger2 简单入门三部曲(二)——为什么使用?
Dagger2 简单入门三部曲(三)——怎么使用?(进行中)
通过 上文 了解到了
dagger2
是什么也就知道了为什么要用它了。
有以下几个原因:
- 解耦。
- 方便做
单元测试
,尤其是Mock 测试
- Dependency injection frameworks have existed for years with a whole variety of APIs for configuring and injecting (官方文档介绍:存在多年,放心使用)
-
大厂、可靠、维护及时
image
解释一下上面说到的几个词。
- 解耦
参考上篇文章介绍Dagger2 简单入门三部曲(一)——是什么?
单元测试是为了测试某一个代码单元而写的测试代码。但是什么叫“一个代码单元”呢?是一个模块、还是一个类、还是一个方法(函数)呢?不同的人、不同的语言,都有不同的理解。一般的定义,尤其是是在
OOP
领域,是一个类的一个方法。在此,我们也这样理解:单元测试,是为了测试某一个类的某一个方法能否正常工作,而写的测试代码。
- 集成测试
集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。
- Mock 测试
mock测试
就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。
先简单理解一下相关概念,为三部曲的终篇做铺垫
这里之所以要理解先相关概念是为了方便理解代码,不然直接上代码我们都是一脸懵逼的。
@Inject
@Inject
不是 Dagger2 中专有的词,它是在 javax.inject 中的
那么javax.inject
又是什么呢?
从下面的英文解释可以看出,inject 就是依赖注入,它的作用是使代码 可以最大化可重用性、可测试性和可维护性
image下面是inject
的不足之处: 查看原文请点击
But @Inject doesn’t work everywhere:
-
Interfaces can’t be constructed.(接口不能够构建)
-
Third-party classes can’t be annotated.(第三方类不能被注解)
-
Configurable objects must be configured!(必须配置可配置对象!)
For these cases where @Inject is insufficient or awkward, use an @Provides-annotated method to satisfy a dependency. The method’s return type defines which dependency it satisfies.
上面介绍完了@Inject
的不足然后开始说解决办法就是用@Provides
注解实现,那么@Provides
是什么?
@Provide
在
modules
中,我们定义的方法是用这个注解,以此来告诉Dagger2
我们想要构造对象并提供这些依赖。
All @Provides methods must belong to a module. These are just classes that have an [@Module](https://google.github.io/dagger/api/latest/dagger/Module.html) annotation
这段话说明了 @Provice
注解是要从属与 某一个 Module
@Module
Modules
类里面的方法专门提供依赖,所以我们定义一个类,用@Module
注解,这样Dagger2
在构造类的实例时候,就知道从哪里去找到需要的依赖。
@Component
Components
从根本上来说就是一个注入器,它是@Inject
和@Module
的桥梁,它的主要作用就是连接这两个部分。
在开始使用 Dagger2
之前需要在Android studio
中点击:Build -> Make Module
让Dagger2
通过 apt
自动生成的我们需要的类
前不久还看到一篇文章说不用 Dagger2
的MVP
架构是没有灵魂的。所以下篇文章我们也来入门一下Dagger2
。
文章如有偏颇,请多指教,一起成长~
网友评论