我记得我之前在日记里说过要写一篇关于dagger的文章,今天,恰好,网络炸了,有点时间来玩玩这些有意思的事情,表示,终于有机会将这些以前没有填上的大坑填上,自己的内心真的好开心,毕竟拖延症是很多人的习惯,或者说是所有人的习惯,因为安于现状才是常态,机遇与挑战,那才是编译,晚上等会的时候再推一推macos汇编,今天就算完美结束了。

一般这种框架的基本操作就基本涵盖了框架的绝大多数的创新点了,所以只需要好好瞅瞅dagger的基本操作就大概可以了。

有言在先,这是瞎猫碰上死耗子篇,找个时间我要是有心情再去看看源码实现的细节,不过按照我当前看这个框架的感觉,应该是没有那个心情了,当然,如果想看看他们gradle的配置,那是另当别论了。记得夏洛克3中有一段对白真的很有意思:

友人A:“我不是说你不够聪明,只是我感觉隐隐约约有点失望。总感觉如果是我来做,我会做的更好,更完美!”
卷福:“人都喜欢挑刺。”

这就是我接触dagger2之后的感觉,眼前一亮,但是亮的不多。

按照我hello world!级别的粗浅理解,这个框架的游戏规则如下:

  1. 游戏的参与有三种不同的对象,提供者(提供注入内容),接收者(接收注入内容),指引者(提示内容具体注入的位置),绑定者(用以同步提供者和接收者的生命周期)
  2. 一个提供者可能服务于多个接收者,提供者通过@Module进行标注
  3. 提供者需要实现方法用以返回注入内容,方法通过@Provides和一个自定义Runtime时期注解(这里假设为@ActivityScope)同时进行标注
  4. @Provides用以标记这个方法的返回对象是注入内容
  5. @ActivityScope用以配对提供者和接收者,直觉来看,通过一个类似Map的数据结构来储存提供者和接收者,以实现两者的生命周期同步
  6. @Component标记的接口就是起到指引者的作用,他起到了连接提供者和接收者的作用,dagger通过apt生成其实现类, 并在实现类中定义了内容的注入过程
  7. 接收者很有可能并不是注入内容的直接对象,这时候就需要@Inject来构建注入层级关系,然后在实际注入时,执行一层层遍历注入操作。

因为是直接通过对象变量赋值的形式进行依赖注入的,相比反射要快的多。反射那层层叠叠的= =,尴尬操作,ClassLoader之类的,其实挺不友好的,唯一的好处就是解耦吧= =!

基本就是这样一种逻辑,说真的,apt其实真的并不难,理清楚思路就很简单,甚至直接模仿做一个相同的出来也是完全可行的。一般我瞎猜就能猜通的= =(不论对错),我挺少再去研究源码的= = ,这也是我的坏毛病之一吧= =,好啦,好几天没正常时间睡觉了,今天就不熬夜了,早点休息吧~

突然想起来,好久没有中二过了,今天破例中二一遍吧= =~

总有一天,你会老去,而我,将会加冕为王~

注:很有可能这是小白无知而肤浅的想法,如有什么问题,很欢迎一起讨论。我希望大家一起成长,因为人是环境的产物,如果大家都变强了,那我毫无疑问也能比以前更强!

另外,我痛恨和鄙视没有教养,满口脏话的俗人,请自重。

开发日记-20190512 关键词 Dagger2原理相关推荐

  1. 开发日记-20190513 关键词 汇编语言(六)

    其实,每次当我写一篇开发日记,并且这篇开发日记并没有关键词,或者我并没有和你扯东扯西的情况下... 这意味着我这天偷懒了= = ;AddTwo.asm --两个32位整数相加.386.model fl ...

  2. 开发日记-20190328 关键词 利用eolinker一键快速生成API接口文档

    今天感觉效率真的很低= =各个层面的,apk发布到现场发现出现了问题,所以一个下午都在忙着解决现场出现的问题,领导一直打电话询问进度,午觉也没有睡所以今天预计的很多计划都处于停滞状态,像昨天规划的今天 ...

  3. 开发日记-20190327 关键词 intant run原理

    已完成 1.flutter练手项目已经完成,Hero动画效果实现 2.java反射机制源码分析 3.项目注解处理器只完成了部分 明日 1.项目注解处理器剩下部分 2.找个更难的flutter项目进行练 ...

  4. 开发日记-20190516 关键词 MVVM-代码浏览结束

    今天生病了呢=+=.其实今天预计将所有的MVVM都做完的,但是就结果而言,并没有想象中来的简单.嘛嘛嘛,不过基本的想法也已经掌握了,感觉Kotlin真的挺不错的,不过仅仅是作为一门开发语言而言.但是作 ...

  5. 开发日记-20190425 关键词 gradle基础学习 7年之约 启动篇

    以前,面试过一家外企,面试我的技术主管真的很友善,完全是以一种技术交流的态度和我进行交流.说真的,那时候,我一度以为我已经大半只脚踏入了这家企业的大门,他们的hr和我说,我们一个星期内将会给你答复.但 ...

  6. 开发日记-20190424 关键词 阶段性开发心得和小结

    Android开发学习小结 -图片因为是以前下下来的,所以出处真的记不太清楚了,如果有清楚出处的欢迎指正,我加上去,另外,这只是我的个人学习小结,并不是特地用于分享的,如果观赏有任何的不悦,还请谅解. ...

  7. 开发日记-20190423 关键词 模块化完整方案实现 blog读后感

    20190423-开发日记 关键词 模块化完整方案实现 blog读后感 参考并感谢: Android 模块化完整方案实现 https://blog.csdn.net/yalinfendou/artic ...

  8. 开发日记-20190422 关键词 插件化(1)概述

    不知道什么时候,javaer这个名词已经成为了一个很通用的词汇,指代那些只知道使用新技术,在新技术出现之后静观其变,等其成熟之后,再用极短的时间学习其用法,然后宣布已经掌握这门新技术的程序员.所谓缺乏 ...

  9. 开发日记-201909024 关键词 linux基础

    这两个月出差,8点下班,所以需要在这个点之前,把日记写好,事情一多,其实就没有多少时间归纳了. 所以就以转载为主,不过这些转载内容都是我个人阅读完的内容,还是很有信心的. 用linux制作iso镜像文 ...

最新文章

  1. 吵架记-2020年6月22日16:47:45
  2. 判断一个jquery对象是否为空jquery对象
  3. mysql yn 字段类型_mysql常用数据类型
  4. PHP连接mysql数据库
  5. Sharepoint COMException 0x81020037
  6. python设计模式之猴子补丁模式
  7. Ranger-AdminServer安装
  8. 捷径app 保存视频_Android N App捷径
  9. 软工实践Alpha冲刺(6/10)
  10. c++解释--百度百科
  11. VJC中机器人走多边形转向角度、速度、时间数值的计算
  12. 服务器系统打不上网卡驱动,服务器网卡驱动程序不能正确加载
  13. 计算机网络习题(参考)
  14. 2020牛客寒假算法基础集训营4 - G 音乐鉴赏-全概率公式
  15. DHCP和域的概念知识
  16. Winedt/CTeX/LaTeX编辑器显示行号
  17. 欧几里德算法、拓展欧几里德、中国剩余定理
  18. Axure RP 9基础教程(四)-文件及文件设置
  19. 帝国cms搜索php分页,帝国cms灵动标签分页的实现方法
  20. mybatis报错 Invalid bound statement (not found)

热门文章

  1. spring applicationContext.xml最全约束
  2. 拉勾网《32个Java面试必考点》学习笔记之一------Java职业发展路径
  3. matlab中system prt,急!!求救!!MATLAB关于prt报错!
  4. datename mysql_sql DATENAME 用法
  5. python程序的三种基本结构是_Python程序设计实验五- 综合运用三种基本结构进行程序设计...
  6. proc除了能用于oracle开发_能不能用于mysql开发_Oracle数据库开发(二).Linux下配置使用ProC...
  7. select查询中@作用_SQL学习第四关:复杂查询
  8. java android下载文件_Android 下载文件(jsp做的服务器上)下载下来和源文件大小不一...
  9. mysql使用group by实现组内排序实战
  10. 通过jquery获取td下的input标签的值,并且改变onclick的参数值