Gradle 中的依赖注入和对象生成

in with 0 comment

如果我们看过 Android Gradle Plugin 就会看见许多 Task 的声明是抽象类,并没有具体的类实现。如果这时候,我们去跑一个 Gradle 任务,会看见类被代理,代理类的名字是原来的名字并加上一个 _Decorate 后缀。

2021-12-18T14:55:07.png

类生成器

抽象类代理生成类是一个叫 AbstractClassGenerator 的东西,它会检查你声明的 Abstract Class 是否合法,如果合法的话就可以被 Gradle 代理,不合法的话,会报错中止流程。
2021-12-18T15:01:11.png

下面有一系列类关于 getter 定义的相关规则

2021-12-18T15:35:48.png

getter 的名字定义粗暴,就是 getXXX,如果getter是抽象方法,且返回的类型是符合条件的,且没有 setter 方法的时候,这个类就是可代理的。我们以一种约束为例:返回指定的类型。

Gradle 对于 Task 管控的类型有一个列表
2021-12-18T15:42:16.png

这个列表记录了 Gradle 可管控的类型,只要你的方法返回的是这些类型,gradle 会使用 ObjectFactory 帮你注入这么一个对象。且在 Task 实例化之后,会对这些 Property 的 dependencies 自动注入 Task。

Property 的作用

这里考虑到,后续其他 Task 如果需要拿到这个依赖,那么就可以直接取这个 Property,里面附带上了 task 依赖信息,因此可以自动做成一个产物依赖的依赖链。