![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
-Cmd-
这个作者很懒,什么都没留下…
展开
-
学习Dagger2笔记:【0】前言
文章目的本系列为个人学习笔记,更多在于个人理解以及对源码的剖析,可能对于想快速上手的人不那么适合普遍认为dagger难以上手,但我认为一是因为官网引导不够详细和普适(用怎样制造咖啡为例着实不熟悉,各种不完整代码片段看得人一脸懵逼),二是大部分文章只说了一些基础用法,一旦涉及到高级用法就潦草带过,难以理解我试着从dagger的使用、设计模式、源码理解几个方面去分析,由浅入深本系列主要以ko...原创 2019-05-17 16:56:29 · 929 阅读 · 2 评论 -
学习Dagger2笔记:【10】dagger中依赖关系与继承关系
目的通过前面几篇文章,我们了解到@Module代表着一个数据仓库,提供需要注入的依赖实例;而@Component代表着一个桥接类,桥接了被注入对象和其依赖的注入器/工厂类。打开这两个注解的源码,会发现原来还有新的世界等待着我们去探索:@Module.includes、@Module.subcomponents、@Component.dependencies,这些就是本系列压轴中要介绍的内容了@...原创 2019-05-17 17:45:59 · 940 阅读 · 0 评论 -
学习Dagger2笔记:【9】Bind系列注解
目标本篇文章的目标是介绍dagger中Bind家族相关的注解,有@Binds、@BindsOptionalOf、@MultiBinds、@BindsInstance@Binds之前我们一直没有为CPU创建CPUMoudle,因为我们将@Inject注解到其构造函数上了,dagger就会自动生成CPU_Factory工厂类,当有其他对象需要依赖CPU时,直接调用此工厂类去创建而不用在@Comp...原创 2019-05-17 17:17:11 · 2011 阅读 · 0 评论 -
学习Dagger2笔记:【8】注入到Set和Map容器
目标我们知道,每台电脑中都有硬盘,并且可能不止一张,每个电脑也会连接很多外设,本文的目的就在于将这些东西用dagger注入到我们的Computer中@IntoSet & @ElementsIntoSet每张硬盘有着不同的类型(机械硬盘和固态硬盘),还有者不同的容量,在Computer中如果将每张硬盘都单独作为一个成员变量,未免扩展性太低了,因此我们用Set容器保存这些硬盘:clas...原创 2019-05-17 17:16:00 · 1047 阅读 · 1 评论 -
学习Dagger2笔记:【7】@Scope
目标:使用dagger注入“单例”通过我们之前对@Provides生成的工厂类、@Inject注解变量或方法生成的注入器以及@Component生成的桥接类的分析,我们发现dagger每次在注入依赖时,其实都会通过工厂类创建一个新的实例,所以在上一篇文章最后,我抛出了dagger中单例的问题,本篇也是围绕着此问题展开的Kotlin中的单例众所周知,在kotlin中通过object可以非常简单...原创 2019-05-17 17:14:16 · 694 阅读 · 0 评论 -
学习Dagger2笔记:【6】Provider & Lazy
再看@Component我们之前使用@Component都仅仅是在其注解的接口中添加一个inject方法,作为进行依赖注入的入口,但@Component的作用远不止如此新需求为了深入研究@Component,我们新增两个需求需求1在Activity显示Computer信息时,我们要求根据当前时间(System.currentTimeMillis())单双作为区别,如果单数就显示wind...原创 2019-05-17 17:12:54 · 845 阅读 · 0 评论 -
学习Dagger2笔记:【5】@Qualifier
dagger与抽象继承、封装和多态是面向对象的三大特征,这三大特征无一不是围绕着抽象这个词展开的,但在前几篇的例子中,我们的依赖都是具体的类型,比如Computer、CPU、Memory,严重违反了依赖倒置原则:模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的总之,我们接下来需要加上抽象的思想,看看dagger怎样处理新增需求现在我们将Co...原创 2019-05-17 17:10:45 · 763 阅读 · 0 评论 -
学习Dagger2笔记:【4】@Component
目标上一篇说到我们想要dagger自动生成出类似于我们手写的Bridge桥接类,本文就是对实现此功能的@Component做一个简介分析,来看看dagger中怎样使用@Component吧依赖图在介绍本篇主角@Component之前,我们先根据已有代码画一个依赖图:(个人认为使用dagger就必须要弄清楚自己的依赖图,无论是画在纸上还是在脑海中,一定要想清楚再编写dagger)如上图所示...原创 2019-05-17 17:08:30 · 1249 阅读 · 0 评论 -
学习Dagger2笔记:【3】@Module & @Provides
使用@Module和@Provides注解还记得上一节中添加的需求吗?要求显示Computer信息前,还要显示当前页面的生成时间为此,我们对Activity添加了如下成员变量:@set:Inject lateinit var timestamp: Date它是一个java.util.Date对象,自然我们是没法将@Inject注解添加到其构造函数上的,因此我们也就没有Date的工厂...原创 2019-05-17 17:05:11 · 2068 阅读 · 0 评论 -
学习Dagger2笔记:【2】@Inject
Kotlin中的注解在开始讲解注解之前,先看下kotlin中的注解有何不同我们知道以下kotlin代码:class Test(var temp: Int)转换为Java代码后是:public final class Test { private int temp; public final int getTemp() { return this.temp; ...原创 2019-05-17 16:59:51 · 2129 阅读 · 0 评论 -
学习Dagger2笔记:【1】依赖与注入
依赖与注入都说dagger2是一个依赖注入的框架,那么什么是依赖,什么又是注入呢?下面以显示一台电脑的信息来举例:每台电脑(Computer)有其操作系统(os)和定价(price)电脑内有处理器(CPU),处理器有着自己的序列号(ID)电脑内有内存(Memory),内存有着自己的容量(size)电脑执行(execute)时,会分别执行处理器和内存,它们在执行时都将自己信息以文本方式返...原创 2019-05-17 16:58:21 · 805 阅读 · 0 评论 -
学习Dagger2笔记:【11】dagger.android
回顾我们回顾一下目前为止的代码,我们通过ApplicationModule数据仓库,提供应用名数据,而Activity和Computer为了拿到这个数据,是通过定义@Subcomponent,使其与ApplicationComponent称为类似内部类组合的关系,从而可以使用到ApplicationModule中的内容。在Android系统中,Activity、Fragment都是由系统创建的,...原创 2019-05-17 17:45:49 · 889 阅读 · 1 评论