昨天无意中,逛到了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 DemoDemo.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%
就业率
|
