谈一谈Lombok及其常用注解

怎么说呢,这个 lombok一直都是毁誉参半的,我个人而言反正是用惯了,懒人神器吧。大大的减少了冗余代码。不过以前用都是最基本的为了不写get/set。虽然可以编译器生成,但是当字段多了也会显得麻烦又多余。
不过这几天因为用mybatis plus代码生成器生成entity和dao了,对于lombok的默认配置有了一些新的认识。所以顺便总结下(我不会告诉你是因为生成的实体中有几个我觉得陌生的注解所以才一个个去百度的)。

lombok是什么?

首先我个人会告诉你,lombok是一个插件。一个引jar包,在编译器还要配置的插件(我只用过idea和eclipse)。引用的办法都挺简单的。eclipse是下载jar然后放到安装目录的某个位置,idea是直接install插件。具体我就不细说了,百度一大堆教程。
然后主要作用就是对javaBeans的简化(上一篇文章才介绍什么是javaBeans)。
对于一个javabean要写一些getter和setter方法,可能还要写一个构造器、equals方法、或者hash方法.这些方法很冗长而且没有技术含量,我们叫它样板式代码。
lombok的主要作用是通过一些注解,消除样板式代码。
lombok既是一个IDE插件,也是一个项目要依赖的jar包.lombok是依赖jar包的原因是因为编译时要用它的注解.是插件的原因是他要在编译器编译时通过操作AST(抽象语法树)改变字节码生成.也就是说他可以改变java语法. 他不像spring的依赖注入或者hibernate的orm一样是运行时的特性,而是编译时的特性。

lombok注解

刚刚说了lombok是通过注解消除样板代码的。具体什么注解,怎么用呢?下面是lombok的所有注解:

  • @Data:在JavaBean中使用,注解包含包含getter、setter、NoArgsConstructor注解
  • @Value注解和@Data类似,区别在于它会把所有成员变量默认定义为private final修饰,并且不会生成set方法
  • @getter:在JavaBean中使用,注解会生成对应的getter方法
  • @setter:在JavaBean中使用,注解会生成对应的setter方法
  • @NoArgsConstructor:在JavaBean中使用,注解会生成对应的无参构造方法
  • @AllArgsConstructor:在JavaBean中使用,注解会生成对应的有参构造方法
  • @RequiredArgsConstructor :生成private构造方法,使用staticName选项生成指定名称的static方法。
  • @ToString:在JavaBean中使用,注解会自动重写对应的toStirng方法
    • @ToString(exclude={"column1","column2"}):排除多个column列所对应的元素
    • @ToString(of={"column1","column2"}):只生成包含多个column列所对应的元素
  • @EqualsAndHashCode:在JavaBean中使用,注解会自动重写对应的equals方法和hashCode方法
  • @Slf4j:在需要打印日志的类中使用,项目中使用slf4j日志框架
  • @Log4j:在需要打印日志的类中使用,项目中使用log4j日志框架
  • @NonNull:注解快速判断是否为空,为空抛出java.lang.NullPointerException
  • @Synchronized:注解自动添加到同步机制,生成的代码并不是直接锁方法,而是锁代码块, 作用范围是方法上
  • @Cleanup:注解用于确保已分配的资源被释放(IO的连接关闭)

还有几个比较复杂的注解:

  • @Accessors

Accessor的中文含义是存取器,@Accessors用于配置getter和setter方法的生成结果,有三个属性:

  • fluent的中文含义是流畅的,设置为true,则getter和setter方法的方法名都是基础属性名,且setter方法返回当前对象。如下
@Data
@Accessors(fluent = true)
public class User {
    private Long id;
    private String name;
    
    // 生成的getter和setter方法如下,方法体略
    public Long id() {}
    public User id(Long id) {}
    public String name() {}
    public User name(String name) {}
}
  • chain的中文含义是链式的,设置为true,则setter方法返回当前对象。如下
@Data
@Accessors(chain = true)
public class User {
    private Long id;
    private String name;
    
    // 生成的setter方法如下,方法体略
    public User setId(Long id) {}
    public User setName(String name) {}
}
  • prefix的中文含义是前缀,用于生成getter和setter方法的字段名会忽视指定前缀(遵守驼峰命名)。如下
@Data
@Accessors(prefix = "p")
class User {
    private Long pId;
    private String pName;
    
    // 生成的getter和setter方法如下,方法体略
    public Long getId() {}
    public void setId(Long id) {}
    public String getName() {}
    public void setName(String name) {}

其实感觉是蛮有用的,代码可以链式写出来。不过说实话我一次没用过。但是这次代码生成器自动生成的entity是chain 的。

  • @RequiredArgsContructor(staticName = "of")

生成一个静态方法,用于构建本类对象,与@NonNull联用,指定那些属性是本方法参数。

  • @Builder

构建者模式。因为这个用的很少,我之前看了demo蛮神奇的,感兴趣的自己看代码吧。

另外lombok还支持几个类,比如val。感兴趣的去看官网:https://projectlombok.org/features/all

这篇笔记就记到这里,如果能稍微帮到你了记得点个喜欢点个关注,另外也祝大家工作顺顺利利!java技术交流群130031711,欢迎各位萌新大佬踊跃加入!

你可能感兴趣的:(谈一谈Lombok及其常用注解)