Lombok框架的主要作用是通过注解可以在编译期
生成某些代码,例如Setters & Getters、hashCode()
与equals()
、toString()
方法等,可以简化开发。
由于源代码(.java
)文件中并没有相关代码,所以,默认情况下,开发工具无法智能提示,直接写出相关代码也会提示错误,则需要在开发工具中安装Lombok插件,安装方式:打开IntelliJ IDEA的设置,在Plugins一栏,在Marketplace
中找到Lombok
并安装即可。
Lombok的常用注解有:
@Data
:添加在类上,可在编译期生成全部属性对应的Setters & Getters、hashCode()
与equals()
、toString()
,使用此注解时,必须保证当前类的父类存在无参数构造方法@Setter
:可以添加在属性上,将仅作用于当前属性,也可以添加在类上,将作用于类中所有属性,用于生成对应的Setter方法@Getter
:同上,用于生成对应的Getter方法@EqualsAndHashCode
:添加在类上,用于生成规范的equals()
和hashCode()
,关于equals()
方法,如果2个对象的所有属性的值完全相同,则返回true
,否则返回false
,关于hashCode()
也是如此,如果2个对象的所有属性的值完全相同,则生成的HashCode值相同,否则,不应该相同@ToString
:添加在类上,用于生成全属性对应的toString()
方法@Slf4j
:添加在类上,???(这个我们一会再说)
此框架的引入,在插件安装市场进行下载安装
File->Setting->Plugings->Marketplace
我们已经知道了Lombok框架的存在,我们不得不说一说它的依赖
<!-- Lombok的依赖项,主要用于简化POJO类的编写 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
其实我么在springboot项目中,我们添加了如下的依赖以后,(如果我们没有下载插件)直接使用@Data注解在代码中看着像是没有起到用作,甚至调用getter和setter方法是爆红,但是我们的编译可以说是没有任何的问题,这个只是Idea没有做出正确的判断,我们就可以到插件安装市场去安装Lombok插件,这样他会引导idea做出正确的判断.时我们的界面不爆红.
@Slf4j
:添加在类上,对于这个注解
在springBoot项目中,基础依赖项(spring-boot-starter)中已经包含了日志相关的依赖项.在添加了Lombok依赖项后,可以在类上添加@Slf4j 注解,则Lombok框架会在编译期生产名为log的变量,可以调用次变量的方法来输出日志.
trace:跟踪信息,可能包含不一定关注,但是包含了程序执行流程的信息
debug:调试信息,可能包含一些铭感内容,比如关键数据的值
info:一般信息
warn:警告信息
error:错误信息
使用Slf4j时,可以使用log变量调用以上五个级别对应的方法,来输出不同级别的日志
在SpringBoot项目中,默认的日志显示级别为info,将会显示此级别以及更重要的级别的日志,可以在application.properties中配置,logging.level.根包=日志显示级别,来设置当前显示级别.例如
# 日志的显示级别
logging.level.根包=error
在开发实践中,应该使用trace或debug级别的日志来输出与流程相关的,敏感数据日志,使用info输出一般的,被显示在控制台也无所谓的信息,使用warn和error输出更加重要的,需要被关注的日志.
输出日志时,通常建议使用void trace(String messsge,Object...args)方法,(也有其他级别日志同样的参数列表的方法),在第一个参数String message中,可以使用{}作为占位符,表示某个变量的值,然后通过第二个参数Object...args来表示各个占位符对于的值,例如
int x =1;
int y=2;
log.info("{}+{}={}",x,y,x+y)
log.info("{}+{}+{}={}",x,y,(x+y),x+y+x+y}
使用以上做法可以避免字符串拼接,提高了代码的可阅读性,也提高了程序的执行效率(字符串拼接执行效率低下,),并且Slf4j日志中,以上第一个参数由于是字符串常量,将被缓存,如果反复执行此日志输出,执行效率也会跟高,
另外,Slf4j是一个日志标准,并不是具体的实现,通常,是通过logback或log4j等日志框架实现的,当前主流的SpringBoot版本中,都使用logback来实现.