Lombok
对于Java偷懒开发者
来说应该是比较中意的,恰恰笔者就是一个喜欢在小细节上偷懒来提高开发效率的人。所以在技术框架的海洋里寻找了很久才在GitHub
开源平台上找到,而在这之前国外很多程序猿一直使用该框架了,Lombok
框架提供了很多编码遍历,但是也降低了代码的阅读力。下面我们看看在Idea开发工具中该怎么使用Lombok
?
本章目标
使用Lombok提高开发效率。
构建项目
本章的项目不涉及数据访问,所以添加的依赖也比较少,pom.xml配置文件如下所示:
复制代码 4.0.0 com.yuqiyu chapter29 0.0.1-SNAPSHOT jar chapter29 Demo project for Spring Boot org.springframework.boot spring-boot-starter-parent 1.5.6.RELEASE UTF-8 UTF-8 1.8 org.springframework.boot spring-boot-starter-web org.projectlombok lombok 1.16.18 org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin
lombok
的依赖仅仅只有一个,lombok
基于配置在编译class文件时会自动将指定模板的内容写入。
创建实体
为了方便演示lombok
的神奇之处,我们简单创建一个用户实体,基于该实体进行配置lombok
注解,实体代码如下所示:
package com.yuqiyu.chapter29.bean;/** * 用户实体>>>测试lombok * ======================== * Created with IntelliJ IDEA. * User:恒宇少年 * Date:2017/8/4 * Time:23:07 * 码云:http://git.oschina.net/jnyqy * ======================== */public class UserBean{ //名称 private String name; //年龄 private int age; //家庭住址 private String address;}复制代码
下面我们先来看看我们最常用的getter/setter
基于lombok
如何使用。
Getter/Setter
Getter/Setter注解作用域可以是实体类也可以是具体的属性字段,下面我们仅仅对name
属性添加注解,代码如下所示:
//...省略 //名称 @Getter @Setter private String name;复制代码
如果想让lombok
生效我们还需要针对idea工具进行插件的安装,下面我们按照顺序打开Idea配置File > Settings > Plugins > Browse repositories... > 输入lombok
,插件就会被自动检索出来,界面如下图1所示:
Install
,点击安装后 重启Idea
就可以了。 为了方便我们直接使用 SpringBoot
项目为我们创建的测试类(位置:com.yuqiyu.chapter29.Chapter29ApplicationTests)来验证我们的 lombok
注解是否已经生效,测试类代码如下所示: package com.yuqiyu.chapter29;import com.yuqiyu.chapter29.bean.UserBean;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.JUnit4;@RunWith(JUnit4.class)//@RunWith(SpringRunner.class)//@SpringBootTestpublic class Chapter29ApplicationTests { @Test public void testLombok() { //测试Getter/Setter UserBean user = new UserBean(); user.setName("测试lombok"); System.out.println(user.getName()); }}复制代码
可以看到我们可以正常使用name
属性的getter/setter方法,但是其他属性的却是无法调用,下面我们修改注解Getter/Setter
位置,配置到实体类上。修改后的代码如下所示:
//省略...@Getter@Setterpublic class UserBean{ //名称 private String name; //年龄 private int age; //家庭住址 private String address;}复制代码
我们再来测试下其他属性是否可以访问到了,测试类修改代码如下所示:
//省略...@Test public void testLombok() { //测试Getter/Setter UserBean user = new UserBean(); user.setName("测试lombok"); user.setAge(10); user.setAddress("测试地址"); System.out.println(user.getName()+" " + user.getAge() +" "+user.getAddress()); }复制代码
可以看到我们修改配置位置后UserBean
实体内的所有属性都具备了Getter/Setter
方法,这样我们在开发中就不需要再去做多余的生成操作了。
注意:如果你的属性Getter/Setter需要做特殊处理,那么直接使用原始方法实现即可,Lombok检查到存在自定义的方法后不会再做生成处理。
ToString
除了上述的Getter/Setter
Lombok还为我们提供了自动生成toString方法的注解@ToString
,该注解的作用域仅仅是在实体类上,我们修改实体类添加该注解,在测试类中调用toString方法查看输出内容如下:
System.out.println(user.toString());//输出:UserBean(name=测试lombok, age=10, address=sss测试地址)复制代码
Lombok
自动创建的toString方法会将所有的属性都包含并且调用后可以输出。
AllArgsConstructor
Lombok
还提供了全部参数的构造函数的自动生成,该注解的作用域也是只有在实体类上,因为只有实体类才会存在构造函数。修改添加该注解并且测试调用,如下所示:
UserBean u = new UserBean("构造lombok",1,"测试地址");//输出:UserBean(name=构造lombok, age=1, address=sss测试地址)复制代码
注意:该注解配置后会自动生成一个具体全部参数的构造函数,参数的顺序与属性定义的顺序一致。
NoArgsConstructor
当然除了全部参数的构造函数,Lombok
还提供了没有参数的构造函数,使用方式与@AllArgsConstructor一致。
到这里也许你就有疑问了,我为了一个类添加这么多注解麻烦吗?还不如工具生成getter/setter
来的快呢,那好Lombok
针对这个问题也做出了解决方案。
Data
我们使用@Data
注解就可以涵盖@ToString
、@Getter
、@Setter
方法,当然我们使用构造函数时还是需要单独添加注解,下面我们修改实体类添加@Data
注解代码如下所示:
/*@Getter@Setter@ToString*/@Data@AllArgsConstructor@NoArgsConstructorpublic class UserBean{ //名称 private String name; //年龄 private int age; //家庭住址 private String address; public String getAddress() { return "sss"+address; }}复制代码
我们将@ToString
、@Getter
、@Setter
三个注解注释掉后添加@Data
,按照官方所说这时我们的测试类应该不会出现任何的异常,我们打开测试类查看是否正常。
@Data
注解确实涵盖了上面三个注解。 Slf4j
还有一个利器,Lombok
为我们内置了各种日志组件的支持,我们在SpringBoot项目开发中几乎都是使用logback
作为日志组件,而logback
是基于slf4j
完成的。所以我们在实体类上直接添加@Slf4j
就可以自动创建一个日志对象作为类内全局字段,自动创建的代码如下所示:
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(Chapter29ApplicationTests.class);复制代码
为了测试我在Chapter29ApplicationTests
测试类上添加了@Slf4j
,调用效果如下所示:
//调用:log.info(u.toString());//输出:23:55:46.100 [main] INFO com.yuqiyu.chapter29.Chapter29ApplicationTests - UserBean(name=构造lombok, age=1, address=sss测试地址)复制代码
总结
以上内容就是本章的全部讲述,本章主要讲解Lombok
用于便于开发的注解组件。Lombok
虽然提供的组件不多,但是每一个都是我们需要的,正是因为如此从而大大减少了我们的工作量,尤其是这种不起眼却又不得不写的代码。
本章代码已经上传到码云:
SpringBoot配套源码地址:SpringCloud配套源码地址:SpringBoot相关系列文章请访问:QueryDSL相关系列文章请访问:SpringDataJPA相关系列文章请访问:感谢阅读!欢迎加入QQ技术交流群,共同进步。