一. Lombok简介
- 为什么要使用Lombok
开发中经常需要为JavaBean添加相应的构造方法,getter/setter方法,toString(),equals() and hashcode()等方法,这些代码很冗长,而且也没有太多技术含量
- Lombok简介
Lombok插件提供了简单的注解来自动生成以上代码,提高开发人员的开发效率
【官网地址】https://projectlombok.org/
【Github地址】https://github.com/rzwitserloot/lombok
二. Lombok提供的注解
1. getter/setter方法的注解
@Getter
@Setter
- toString()方法的注解
@ToString
- equals()和hashCode()方法的注解
@EqualsAndHashCode
- 构造方法的注解
@NoArgsConstructor //无参构造器
@AllArgsConstructor //全参构造器
@RequiredArgsConstructor //只包含final和@NonNull注解的成员变量的私有构造器
@NonNull //用在类的属性上,限定属性不能为空,否则抛出空指针异常
- 组合注解
@Data = @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor
@Value = @Getter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor
- 日志注解
Lombok支持JDK的Log,以及第三
方的Log4j,Slf4j,LogBack等多种日志框架
Lombok会在类中自动添加定义日志变量log的代码,后续代码中可以直接使用log变量
@Log注解
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(类名.class.getName());
@Log4j注解
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(类名.class);
@Slf4j注解
private static final Logger log = LoggerFactory.getLogger(类名.class);
【注意】SpringBoot默认支持slf4j + logback日志框架,直接使用@Slf4j注解
三. Lombok的使用步骤 重点
- 在IDEA中安装lombok插件
Settings --> Plugins --> 在Marketplace中搜索lombok,安装lombok插件,并重启IDEA,使插件生效
【本地安装】https://plugins.jetbrains.com/plugin/6317-lombok/
- 在pom文件中引入Lombok的依赖
<!-- Lombok插件 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>
- 使用Lombok提供的日志注解
(1)导入Log4j日志框架的jar包依赖
<!-- Log4j日志框架 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
(2)将Log4j的日志文件log4j.properties保存在resources文件夹下
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n
四. Lombok的工作原理 了解
Lombok插件在编译时修改Java类的字节码,自动在类中添加了所需的代码后,再编译成字节码
-
JSR 269规范
-
从JDK6开始,javac就支持“JSR 269 Pluggable Annotation Processing API”规范,只要程序实现了该API,就能在javac运行的时候得到调用,而Lombok就是一个实现了"JSR 269 API"的插件
2. 工作流程
(1)javac.exe对java源码进行分析,生成一棵抽象语法树(AST)
(2)javac.exe调用实现了JSR 269的Lombok插件程序
(3)Lombok就对AST进行处理,找到Lombok注解所在类对应的语法树并对其进行修改,增加Lombok注解定义的相应树节点
(4)javac.exe使用修改后的抽象语法树(AST)生成字节码文件