前言
Dagger2.38.1源码解析指南,相当于一个整体框架的梳理,这样可以避免浪费时间去摸索它的功能板块,给后来者或者再来者提供一个学习参考。当然了,如果对源码一点不了解的情况下,不一定能达到我所说的效果,但是按照我说这个大纲去对照源码解析我感觉也是非常有帮助的。
理想是丰满的,现实是骨感的!!!对我来了一句你写的什么玩意儿肯定也大有人在!!!
当前是基于Dagger2.38.1源码解析得出来的结论,相对来说感觉更加精准,存在不足欢迎讨论。
还有其他代码,这里主要针对核心的AndroidProcessor和ComponentProcessor描述。
Dagger2.38.1版本源码非常有意思的一点是自己使用了自身的注解,所以它本身也是也给Dagger demo样本,为什么这么做的原因个人理解是:开发人员编写代码过程中是否容易出现理解偏差,反正我看代码的时候经常要问问自己我是谁,我到底在干啥!!!
我现在就像问我是谁,我到底在干啥???
想了一会,好吧!我继续,你随意!!!
整体架构
处理的是AndroidProcessor和ComponentProcessor。AndroidProcessor处理android特定注解,ComponentProcessor处理当前Dagger核心注解;
AndroidProcessor
两个板块,一个用于校验MapKey注解修饰的注解;一个用于处理ContributesAndroidInjector注解:先校验+节点生成对象,校验通过后对节点生成代码。
AndroidMapKeyValidator
对AndroidInjectionKey和ClassKey修饰的方法校验。
ContributesAndroidInjectorGenerator
-
使用ContributesAndroidInjector修饰的注解的方法节点,先通过AndroidInjectorDescriptor.createIfValid方法生成AndroidInjectorDescriptor对象,生成过程中校验;
-
生成实现代码。
这里也并没有完,AndridProcessor中处理的注解还会按照ComponentProcesso的注解规则处理。
ComponentProcessor
这里涉及到自身的注解,我们不做讲解&#