聊聊AbstractProcessor和Java编译流程

您所在的位置:网站首页 java类编译过程 聊聊AbstractProcessor和Java编译流程

聊聊AbstractProcessor和Java编译流程

2024-07-10 10:10:22| 来源: 网络整理| 查看: 265

各位大佬,能不能随便给我的项目或者之前的文章点个star,苦兮兮。github.com/ 掘金文章

我:我写过一个路由跳转库,我通过了AbstractProcessor生成了路由表的注册类。

面试官: 既然你写过AbstractProcessor,那么我们来聊聊这个吧。

我:OK,放马过来,谁怂谁是狗。

面试官:那么kapt和transform有什么差别啊?

我:AbstractProcessor只能处理注解,然后根据注解通过javapoet生成一个新的java类。而transfrom则是通过gradle插件的transfrom方法,对.class文件做的修改。

面试官:嗯,那么下一个问题,你知道AbstractProcessor是在编译时的哪个环节操作的吗?

我:汪?

面试官:那么我们继续聊聊AbstractProcessor,当获取到的注解之后,如何判断实现了注解的Class是否继承自activity。

我:汪汪汪汪!!!!!

面试官:emmmmmmmm,回家等通知吧。

什么是Processor

AbstractProcessor是一个抽象类,它的父类是Processer。翻阅了网上大部分文章,基本没有一个很好的对这个类的一个描述。我最后找到了Java的Api Doc文档,其中有对这个类的一些说明。

Processor释义

注释处理按照rounds的顺序进行。 在每一轮中,可以向处理器询问process在前一轮产生的源文件和类文件上找到的注释的子集。 第一轮处理的输入是工具运行的初始输入; 这些初始输入可以被视为虚拟第0轮处理的输出。 如果要求处理器在给定轮次上进行处理,则会要求处理后续轮次,包括最后一轮,即使没有要处理的注释。 工具基础结构还可以要求处理器处理由工具的操作隐式生成的文件。

The command-line utility apt, annotation processing tool, finds and executes annotation processors based on the annotations present in the set of specified source files being examined. The annotation processors use a set of reflective APIs and supporting infrastructure to perform their processing of program annotations (JSR 175). The apt reflective APIs provide a build-time, source-based, read-only view of program structure. These reflective APIs are designed to cleanly model the JavaTM programming language's type system after the addition of generics (JSR 14). First, apt runs annotation processors that can produce new source code and other files. Next, apt can cause compilation of both original and generated source files, thus easing the development cycle.

简单的说就是Processor会在编译阶段初始化,然后对当前模块内的代码进行一次扫描,然后获取到对应的注解,之后调用process方法,然后我们根据这些注解类来做一些后续操作。

java的编译流程

上图是一张简单的编译流程图,compiler代表我们的javac(java语言编程编译器)。这张图应该中其实缺少了一个流程,在source -> complier的过程中就应该把我们的Processor补充上去。

把两张图结合就是整个java的编译流程了。整个编译过程就是 source(源代码) -> processor(处理器) -> generate (文件生成)-> javacompiler -> .class文件 -> .dex(只针对安卓)。

路由注解Processor

我写的那个流弊的一塌糊涂的路由库,一个路由库的构成应该是由四个部分构成的。

负责路由跳转的java代码 annotation 注解 AbstractProcessor 负责生成路由表的初始化类 gradle plugin 负责收集生成的注册类,然后插桩

我们今天只说Processor。先从接口的方法介绍起把。

变量和类型 方法 描述 Iterable


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭