![](https://img-blog.csdnimg.cn/2020101413170960.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
dagger源码解析,基于2.38.1版本
文章平均质量分 89
dagger源码解析
佛学徒-代码搬运工
这个作者很懒,什么都没留下…
展开
-
8.基于Dagger2.38.1的hilt源码-RootProcessor和ComponentTreeDepsProcessor
RootProcessor处理@HiltAndroidApp、@HiltAndroidTest和@InternalTestRoot三种注解,以及该注解关联的注解。生成一个@ComponentTreeDeps修饰的节点,该节点再由ComponentTreeDepsProcessor类处理。原创 2022-04-24 17:47:07 · 1156 阅读 · 0 评论 -
0.基于Dager2.38.1的hilt源码-前言
想了解hilt源码必须对Dagger的使用有所了解,否则将会感觉说的云里雾里。当前hilt源码在应用上相对来说比Dagger简化很多,所以使用方便。but,他还是转换成Dagger形式,所以从源码的角度来说做的比Dagger感觉还要多。代码理解起来自然不容易。原创 2022-04-24 16:52:30 · 1479 阅读 · 0 评论 -
7.基于Dagger2.38.1的hilt源码-@DisableInstallInCheck、@EarlyEntryPoint、@GeneratesRootInput和@OriginatingElem
基于Dagger2.38.1的hilt源码-@DisableInstallInCheck、@EarlyEntryPoint、@GeneratesRootInput、@OriginatingElement和@UninstallModules原创 2022-04-12 10:09:51 · 1397 阅读 · 0 评论 -
6.基于Dagger2.38.1的hilt源码-AliasOfProcessor 和 DefineComponentProcessor
AliasOfProcessor处理@AliasOf,该注解用于修饰其他注解。DefineComponentProcessor处理@DefineComponent注解和@DefineComponent.Builder注解修饰的节点。原创 2022-04-12 09:15:23 · 185 阅读 · 0 评论 -
5.基于Dagger2.38.1的hilt源码-AggregatedDepsProcessor
本篇主要是处理@InstallIn和@TestInstallIn、@Module、@EntryPoint和@EarlyEntryPoint和@GeneratedEntryPoint和@ComponentEntryPoint注解。这些注解只能用于修饰类或接口。原创 2022-04-11 10:40:22 · 214 阅读 · 0 评论 -
4.基于Dagger2.38.1的hilt源码-@HiltViewModel注解处理
ViewModelValidationPlugin用于校验@HiltViewModel注解和外部的关联。`ViewModelProcessor`类处理@HiltViewModel。当前使用该注解的节点校验并且生成`ViewModelMetadata`对象,针对该`ViewModelMetadata`对象再生成类。原创 2022-04-08 11:18:40 · 769 阅读 · 0 评论 -
3.基于Dagger2.38.1的hilt源码-CustomTestApplicationProcessor
`CustomTestApplicationProcessor`类处理@CustomTestApplication。当前使用该注解的节点校验并且生成`CustomTestApplicationMetadata`对象,针对该`CustomTestApplicationMetadata`对象再生成类。原创 2022-04-08 09:47:05 · 264 阅读 · 0 评论 -
2.基于Dagger2.38.1的hilt源码-BindValueProcessor
前言BindValueProcessor类处理@BindValue、@BindValueIntoSet、@BindElementsIntoSet或@BindValueIntoMap。当前使用该注解的节点校验并且生成BindValueMetadata对象,针对该BindValueMetadata对象再生成类。校验并且生成BindValueMetadata对象@BindValue、@BindValueIntoSet、@BindElementsIntoSet或@BindValueIntoMap修饰的bind原创 2022-04-08 09:06:02 · 1901 阅读 · 0 评论 -
1.基于Dagger2.38.1的hilt源码-AndroidEntryPointProcessor
`AndroidEntryPointProcessor`类处理@AndroidEntryPoint和@HiltAndroidApp注解。当前使用该注解的节点校验并且生成`AndroidEntryPointMetadata`对象,针对该`AndroidEntryPointMetadata对象再生成类。原创 2022-04-07 09:56:47 · 505 阅读 · 0 评论 -
0.Dagger2.38.1源码解析指南
前言Dagger2.38.1源码解析指南,相当于一个整体框架的梳理,这样可以避免浪费时间去摸索它的功能板块,给后来者或者再来者提供一个学习参考。当然了,如果对源码一点不了解的情况下,不一定能达到我所说的效果,但是按照我说这个大纲去对照源码解析我感觉也是非常有帮助的。理想是丰满的,现实是骨感的!!!对我来了一句你写的什么玩意儿肯定也大有人在!!!当前是基于Dagger2.38.1源码解析得出来的结论,相对来说感觉更加精准,存在不足欢迎讨论。还有其他代码,这里主要针对核心的AndroidProces原创 2022-03-18 10:01:51 · 134 阅读 · 0 评论 -
9.Dagger2.38.1源码解析-AndroidProcessor注解梳理
前言前面主要针对component及其关联的subcomponent、module、bindingMethod、Inject等核心注解的解析。这里针对AndroidProcessor注解梳理以及ComponentProcessor中其他注解例如MapKey注解梳理AndroidProcessor注解AndroidMapKeyValidator类对AndroidInjectionKey和ClassKey注解的校验,这两个注解是使用MapKey注解修饰的注解;ContributesAndroidInje原创 2022-03-17 10:19:31 · 227 阅读 · 0 评论 -
8.Dagger2.38.1源码解析-Demo梳理component节点生成代码
前言考虑到这块代码的复杂性,我们以当前ProcessorComponent节点生成DaggerComponentProcessor_ProcessorComponent作为demo案例讲解。在讲解前,我们必须先把路由图整理出来,该路由图的作用是依赖的关联生成对应的变量和代码块:component代码实现核心在关系图文件夹下,灰常灰常重要在熟悉下面demo前务必认真、多次、对照前面的关系图去理解当前路由图。component代码生成器是ComponentGenerator类,该类的topLeve原创 2022-03-16 10:12:10 · 188 阅读 · 0 评论 -
7.Dagger2.38.1源码解析-BindingGraph绑定图形生成和校验
前言继续前面的讲解,这里主要是讲解BindingGraph的生成和校验。如果前面的知识点熟透了,这里其实和后面代码的生成部分并不是很难。绑定图形生成BindingGraph绑定图形是通过一系列转换最终得到该对象。LegacyBindingGraphLegacyBindingGraph对象主要是从componentMethod入口方法(入口方法存在依赖,所以返回类型不能是subcomponent节点)为切入点,从componentMethod入口方法的依赖的key开始去匹配各种声明的key属性:原创 2022-02-23 08:30:22 · 290 阅读 · 0 评论 -
6.Dagger2.38.1源码解析-Resolved解析器
前言这部分对前面的依赖非常大,这一部分的精华是Resolved解析:从component入口方法componentMethodEntryPoint开始,该入口方法的参数paramter作为当前需要注入实例的MembersInjectionObject对象,该MembersInjectionObject对象中使用的Inject修饰的变量或普通方法表示需要外部component容器实现实例化并且注入到MembersInjectionObject对象中的。换成当前ComponentProcessor作为Dem原创 2022-02-21 11:08:52 · 1905 阅读 · 0 评论 -
5.Dagger2.38.1源码解析-ComponentProcessor注解生成对象 续
前言继上篇Component及其关联的节点生成的对象,这篇文章主要针对使用Inject或AssistedInject注解生成绑定对象。生成对象在InjectProcessingStep处理Inject或AssistedInject修饰的节点,生成的对象存储于injectBindingRegistry对象中,该对象就是ComponentProcessor类中的被Inject修饰的变量injectBindingRegistry——通过InjectBindingRegistryModule的injectBi原创 2022-02-17 11:14:25 · 135 阅读 · 0 评论 -
0.Dagger2.38.1源码解析-多种类型查询总结
简介前面的某部分内容影响到后续的代码,所以把一些后面需要的内容在抽离复制一份到这里,这样后面的代码有些直接在这里查找即可。当然不是万能的,该看的还是需要回头看。Key对象一个对象,包含①是否存在包裹,②是否使用了Qualifier注解的注解修饰。如果是依赖中的key对象则表示钥匙,用于匹配binding绑定的key对象非常精辟的总结,自我感觉良好,看不懂去看代码会明白的!!!DependencyRequest依赖对象某一个对象A如果存在DependencyRequest依赖属性,表示当原创 2022-02-17 11:11:08 · 842 阅读 · 0 评论 -
4.Dagger2.38.1源码解析-ComponentProcessor注解生成对象
简介使用不同注解的节点生成不同对象,对该对象的核心属性介绍,以及一些核心方法说明。在学习的过程中最好拿一个笔对存在的问题进行记录,后面可能会找到,而且要学会不断翻阅前面的内容。如果都找不到需要的答案,我相信这个就是自身找到的亮点问题,对自身提升也有很大帮助。节点生成的对象ComponentDescriptor该对象的生成在ComponentProcessingStep中继校验之后调用如下方法完成ComponentDescriptor对象的生成:生成的是componentDescriptor对象:原创 2022-02-17 10:53:49 · 250 阅读 · 0 评论 -
0.Dagger2.38.1源码解析-多种类型查询总结
简介前面的某部分内容影响到后续的代码,所以把一些后面需要的内容在抽离复制一份到这里,这样后面的代码有些直接在这里查找即可。当然不是万能的,该看的还是需要回头看。Key对象一个对象,包含①是否存在包裹,②是否使用了Qualifier注解的注解修饰。如果是依赖中的key对象则表示钥匙,用于匹配binding绑定的key对象非常精辟的总结,自我感觉良好,看不懂去看代码会明白的!!!DependencyRequest依赖对象某一个对象A如果存在DependencyRequest依赖属性,表示当原创 2022-02-17 10:52:41 · 410 阅读 · 0 评论 -
3.Dagger2.38.1源码解析-ComponentProcessor注解规则 续
前言可以加入575306647讨论dagger这里是对Inject或InjectAssisted以及一些关联的注解进行规则校验,以及其他注解校验。代码逻辑规则具体代码体现出来的规则。Inject和AssistedInject整体了解InjectProcessingStep类校验Inject和AssistedInject注解,InjectBindingRegistry对象是外部实例化后作为参数传递到当前InjectProcessingStep类。InjectBindingRegistryImp原创 2022-02-16 11:21:56 · 114 阅读 · 0 评论 -
2.Dagger2.38.1源码解析-ComponentProcessor注解规则
前言github相关源码上有详细的注解,请自行对照github源码简单解说下ProcessorComponent接口上module节点的作用:InjectBindingRegistryModule:对ComponentProcessor类中injectBindingRegistry变量最终实例化成InjectBindingRegistryImpl对象;SourceFileGeneratorsModule:为后面的代码生成提供实例化对象;ProcessingStepsModule:本章核原创 2022-02-16 10:57:55 · 196 阅读 · 0 评论 -
dagger源码剖析(一)BasicAnnotationProcessor源码解析(202106修正)
前言昨天写了很久,突然错点,从头开始…不了解注解,可以先去看下注解文章:Java学习之注解(五)Android循序渐进实现高逼格自定义ViewBinderdagger注解,通过dagger系列(五)之Bazel构建dagger2.29.1解说总经理(根目录下BUILD)分发的任务,我们了解dagger是通过扫描ComponentProcessor插件生成代码,ComponentProcessor继承了BasicAnnotationProcessor,BasicAnnotationProcessor又原创 2020-12-15 14:58:02 · 599 阅读 · 2 评论