章节索引
- 前提
- 配置依赖
- 安装插件
- 常用注解介绍
- @Data
- @NoArgsConstructor
- @AllArgsConstructor
- @Builder
- @Cleanup
- @NonNull
- @Slf4j
- 后记
前提
这篇博文是这套Spring Boot学习笔记的第六篇——Lombok篇,主要内容包含通过Lombok工具减少实体类中的工作量。如果需要了解有关Spring Boot的综述信息或博文的索引信息,请移步:
《综述篇》
配置依赖
首先需要在pom.xml
中添加以下依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
安装插件
由于Lombok
采用了编译期解析
的技术,所以在调试期
调用相应的方法IDE会报错,所以必须安装插件。
- 通过
File
->Settings
打开设置界面。 - 点击
Plugins
进入插件选项卡。 - 在上方的搜索框输入
Lombok
,结果中第一个就是,点击Install
即可。
常用注解介绍
Lombok主要包含许多注解
,通过合理的使用,可以大幅度减少开发的工作量,最适合在POJO
中使用。
@Data
类注解,最常用的注解之一,功能强大。为被注解的类的属性生成setter/getter
、equals
、canEqual
、hashCode
、toString
等方法,对于final
属性,则不会为其生成setter
方法。
由于@Data
注解的功能粒度太大,其功能可以被以下的注解来分解:
-
@Getter
和@Setter
:用于独立指定生成getter
和setter
。 @EqualsAndHashCode
:用于生成equals
和hashCode
方法。
- 默认使用非静态(
static
)和非瞬态(transient
)字段生成。 - 可使用
exclude
属性排除一些字段。 - 可使用
of
属性指定只用某些字段。 - 默认不调用父类的方法,可使用
callSuper = true
来使其生成的方法调用父类的方法。
@ToString
:用于生成toString
方法。
- 举例说明,如以下的类:
@Getter @Setter @ToString
public class User {
private int id;
private String name;
}
构造一个对象并调用toString
public static void main(String[] args) {
User user = new User();
user.setId(1);
user.setName("Imple");
System.out.println(user.toString());
}
输出如下:
User(id=1, name=Imple)
-
@ToString
同样有exclude
、of
和callSuper
等属性,作用和@EqualsAndHashCode
的类似。
@NoArgsConstructor
生成无参构造方法,如:
public class User {
private int id;
private String name;
public User(){}
}
@AllArgsConstructor
生成全参构造方法,如:
public class User {
private int id;
private String name;
public User(int id, String name){
this.id = id;
this.name = name;
}
}
@Builder
建造者模式,为类生成Builder内部类,创建对象的示例:
User user = new UserBuilder()
.id(1)
.name("Imple")
.build();
@Cleanup
自动调用对象的close
方法,也即目标类必须实现AutoCloseable
接口。作用相当于try-with-resources
,但是选用注解会让代码看起来更加整洁。
@NonNull
方法参数注解,如果加了注解的参数被传入了null
,会抛出空指针异常。
@Slf4j
日志类注解还有很多哦,基本上是与市面上的日志框架对等的,使用哪个根据工程中的配置和依赖。它的作用相当于:
private final Logger log = LoggerFactory.getLogger(当前类名.class);
加上注解后可以直接在代码中调用log
对象来输出日志。
后记
可以看到Lombok的开发者相当于做了个大的抽象,把程序中具有一定格式或模式的代码抽象到对应的注解当中,尽最大可能帮助我们来减少编码的工作量。由此我有一个有趣的想法,这些场景都比较符合具有横切逻辑的场景
的定义,Lombok这样是不是一定程序上抢了AOP
的饭碗了呢?哈哈。