基于注解处理器开发自动生成getter和setter方法的插件

 昨天无意中,逛到了lombok的网站,并看到了首页的5分钟视频,视频中的作者只是在实体类中写了几个字段,就可以自动编译为含setter、getter、toString()等方法的class文件。看着挺新奇的,于是自己研究了一下原理,整理下发出来。

1.何处下手

视频中作者的流程为:

(1)编写Java文件,在类上写@Data注解

@Data public class Demo {     private String name;     private double abc; }

(2)javac编译,lombok.jar是lombok的jar包。

javac -cp lombok.jar Demo.java

(3)javap查看Demo.class类文件

javap Demo

Demo.class:

public class Demo {   public Demo();   public java.lang.String getName();   public void setName(java.lang.String);   public double getAbc();   public void setAbc(double); }

可以看到Demo.class内部竟然多了很多未定义的setter、getter方法,而视频作者主要使用的就是注解+编译,那么我们就从这方面入手。

2.必备知识

2.1 注解

注解,相信大部分人都用过,不少人还会自定义注解,并会利用反射等搞点小东西。但本文所讲的并非是利用注解加反射在运行期自定义行为,而是在编译期。

自定义注解离不开四大元注解。

@Retention:注解保留时期

保留类型 说明
SOURCE 只保留到源码中,编译出来的class不存在
CLASS 保留到class文件中,但是JVM不会加载
RUNTIME 一直存在,JVM会加载,可用反射获取

@Target:用于标记可以应用于哪些类型上

元素类型 适用场合
ANOTATION_TYPE 注解类型声明
PACKAGE
TYPE 类,枚举,接口,注解
METHOD
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信