版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010508829/article/details/80180502
开发神器-神奇插件Lombok让臃肿的java美眉得到新生
本文环境:java8 eclipse maven3.5 Springboot 2.0.1
Lombok是什么
lombok是一个神奇的开发插件,他能够通过简单的注解,来把代码中的重复大量的样板代码进行一个简单的替换,如set/get方法以及equals和hashCode实现等~。
Lombok的安装
两步进行插件的安装
1. Eclipse插件安装【idea安装只需要在插件市场里搜索lombox plugin 安装即可】
jar包下载
- 官方下载,找到lombok版本中选择1.16.20进行下载,拷贝进项目中[本文采用maven导入,与拷贝区别不大]
- 下载地址:lombok all-versions
打开jar包
- 双击打开即可。
- 如果不可以打开就使用命令行打开 [java -jar lombok.jar]
- 打开之后安装
- 检查一下Eclipse是否安装成功
2. jar包引入
本文采用lombok 1.16.20版本
maven导入,拷贝进pom文件
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
</dependency>
Lombok怎么用 (常用注解)
Lombok以注释的方式使用,只需要在需要生成通用方法的地方加上对应的注释,即可快速的实现开发
@getter和@Setter
这两个注解分别生成Getter与Setter方法
//在属性上注解
public class UserGetterSetter {
// 在属性上注解,这样就会对应的生成get/set方法
@Getter @Setter
private String name;
@Getter @Setter
private Integer age;
}
//在类上注解,这样所有属性都会生成get/set方法
@Getter @Setter
public class UserGetterSetter {
private String name;
private Integer age;
}
@NonNull
这个注解会快速的检查当前值是否为空,如果为空则抛NullPointerException异常
public class UserNonNull {
// 用了@NonNull这个注解,在构造set等方法中都会进行非空判断
@Getter @Setter @NonNull
private String name;
}
@ToString
这个注解生成toString方法,如果需要排除输出属性可在内
// callSuper 是否输出超类属性方法,exclude排除某属性
@ToString(callSuper=true,exclude="interest")
public class UserToString extends UserGetterSetter{
private String sex="男";
private String interest="女";
}
@EqualsAndHashCode
这个注解生成equals和hashCode方法
// 与ToString注解用法基本相似
// callSuper 生成时是否包含超类,exclude排除某属性
@EqualsAndHashCode(callSuper=true,exclude= {"interest","money"})
public class UserEqualsAndHashCode extends UserGetterSetter{
private String sex="男";
private String interest="女";
private Double money=100.0;
}
@Data
这个注解最常用,它结合了功能成@ToString, @EqualsAndHashCode, @Getter和@Setter
//@Data
//@Data设置staticConstructor属性可以生成静态工厂方法,生成参数指定名称的静态工厂方法
@Data(staticConstructor="getUserData")
public class UserData{
private String name;
private Integer age;
private String sex="男";
private String interest="女";
private Double money=100.0;
}
@Cleanup
- @Cleanup注解,确保分配资源被释放。
- 使用时要考了清理会不会引发异常,如果引发了,由于使用了@Cleanup注解问题会被埋藏起来,看日志报错很难找到根源。
public class CleanupTest {
// 实现资源释放
// 加注解
public void testCleanUpLombox() {
try {
@Cleanup ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(new byte[] {'Y','e','s'});
System.out.println(baos.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
// 原始方式
public void testCleanUp() {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
baos.write(new byte[]{'Y', 'e', 's'});
System.out.println(baos.toString());
} finally {
baos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
@synchronized
这个注解作用是快速生成线程同步的模版。在方法上使用整个方法线程安全。也可以在对象上使用,会造成死锁。不建议在变量上使用。
public class SynchronizedTest{
// 使用注解
@Synchronized
public void synchronizedTestLombox() {
System.out.println("----1-----");
System.out.println("----2-----");
System.out.println("----3-----");
System.out.println("----木-----");
System.out.println("----头-----");
System.out.println("----人-----");
}
// 不使用注解
private final java.lang.Object $lock = new java.lang.Object[0];
public void synchronizedTest() {
synchronized ($lock) {
System.out.println("----1-----");
System.out.println("----2-----");
System.out.println("----3-----");
System.out.println("----木-----");
System.out.println("----头-----");
System.out.println("----人-----");
}
}
}
@Slf4j
快速生成日志模版, 最好用的注解之一,与@Data并驾齐驱
只需要在类的开头加上注解,就ok了,记得加上日志依赖,本文使用的是SpringBoot默认日志框架logback
@Slf4j
public class Slf4jTest {
public void testSlf4j() {
log.debug("这是debug");
log.info("这是Info");
log.error("这是error");
Integer errorCode = 11;
log.error("这是error 错误代号={}", errorCode);// 传入值为object,打印时中括号会背代替掉
}
}
感谢您的耐心阅读,由于我还是一个未经世事的美男子,无法面面俱到的给您讲出我的内心想法,如有错误之处,请多多指正!
江湖再见,欢迎您关注我!
本文采用资料有 :
Lombok 官方文档
本文项目源代码 :
GarfieldHuang/JavaDemo