Java规范:JSR 269(Java Specification Requests)插件化注解处理API(Pluggable Annotation Processing API)
JDK1.6 提供的特性,在 Javac编译期(SOURCE标识)利用注解,在字节码文件中生成get、set等方法。
Java编译器执行过程:
public abstract class AbstractProcessor implements Processor{}
自定义类似lombok注解案例:
1.0 定义编译期的注解
package org.example.core;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(ElementType.TYPE)//@Retention(RetentionPolicy.CLASS)@Retention(RetentionPolicy.SOURCE)public @interface GetterSetter {}
2.0 利用JSR269 api(Pluggable Annotation Processing API )创建编译期的注解处理器
@AutoService(Processor.class) //简化了SPI的配置@SupportedAnnotationTypes("org.example.core.GetterSetter")public class GetterSetterProcessor extends AbstractProcessor {//利用tools.jar的javac api处理AST(抽象语法树)}
<!-- AST工具包 --><dependency><groupId>com.sun</groupId><artifactId>tools</artifactId><version>1.8</version><scope>system</scope><systemPath>${tools.path}</systemPath><optional>true</optional></dependency>
3.0 将功能注册进jar包,就是配置SPI
     @AutoService(Processor.class) //简化了SPI的配置
<!-- 自动生成SPI文件 --><dependency><groupId>com.google.auto.service</groupId><artifactId>auto-service</artifactId><version>1.0-rc5</version></dependency>
4.0 打成jar包
5.0 使用的项目引入jar, 就可以使用@GetterSetter
