首先我们常用的注解是通过元注解去编写的,
比如:
元注解有@Target 用来限定目标注解所能标注的java结构,比如标注方法,标注类;
@Retention则用来标注当前注解的生命周期;比如source,class,或runtime,表示注解只出现在源代码中,字节码中和运行过程中;
开发人员使用元注解自定义注解,定义出的注解为java编译器添加编译规则,java提供了注解处理器将编译规则接入到java编译器中;
java编译的过程分为三步:1、将源代码解析成抽象语法数,2、调用已注册的注解处理器,3、生成字节码;
注解处理器主要有三个用途:1、定义编译规则并检查被编译的源文件,2、修改已有的源文件,3、生成新的源文件
修改或生成源文件是通过修改java源代码生成的抽象语法数,再其中修改已有树节点或者插入新的树节点,从而使生成的字节码发生变化;
如果在编译的第二步,调用已注册的注解处理器时,生成了新的源代码,java编译器将重复1,2步骤,直到不再生成新的源代码;