使用Lombok 简洁你的代码
标签: # JavaWeb java lombok Annotation

文章目录
【官方介绍】
Lombok 项目是一个Java库,它会自动插入您的编辑器和构建工具中,从而为您的Java增光添彩. 永远不要再写另一个getter或equals方法,带有一个注释的您的类有一个功能全面的生成器,自动化您的日志记录变量等等。
简单来说,就是消除Java中的冗长代码,对于简单的Java对象,通过注解来实现。
俺其实只记得一个课代表注解(其他的能不知道,这个可得记好了),其他的也不太清楚。现在总结一下常用注解,在日后的代码中减少冗余
Lombok原理
JSR 269:插件话处理API
Java中的注解如果我们按运行机制分,可以分为:
- 源码注解,只在源码中存在
- 编译时注解,在class中依然存在,如
@Deprecated - 运行时注解,运行阶段起作用,如
@Autowired

Lombok的注解其实是编译时注解,它在编译期间通过注解的方式把我们需要的如get()、set()方法生成到 .class 文件中
在实体类中,你本身并没有写get()、set()方法,但是在虚拟机运行时它其实是存在的,你只是通过注解,让Lombok帮你写了
在阅读代码时,我们看到的只是几个简单的@Annotation,编译时lombok帮你生成,达到消除冗长代码的作用
Lombok常用注解表

注解表
| 注解名 | 作用 |
|---|---|
| @Setter | 生成setter方法 |
| @Getter | 生成getter方法 |
| @NoArgsConstructor | 生成空参构造 |
| @AllArgsConstructor | 生成全部参数构造 |
| @RequiredArgsConstructor | 将标记为@NoNull的属性生成一个构造器 |
| @ToString | 生成所有属性的toString()方法 |
| @EqualsAndHashCode | 生成equals()方法和hashCode方法 |
| @Data | @Data直接修饰POJO or beans, getter所有的变量,setter所有不为final的变量。默认生成的所有的Annotation都是public的,如果需要不同权限修饰符可以使用AccessLevel.NONE选项 |
| @Builder | 构造Builder模式的结构,通过内部类Builder()进行构建对象 |
| @Synchronized | 同步方法 |
| @Cleanup | 自动调用close方法关闭资源 |
| @SneakyThrows | 可以对受检异常进行捕捉并抛出 |
Lombok常用注解
Getter & Setter
- 为所有成员变量添加
Getter和Setter,在类外定义
@Getter
@Setter
public class User {
private int id;
private int age;
private String username;
private String password;
}
- 权限修饰
@Getter(AccessLevel.PUBLIC)
@Setter(AccessLevel.PRIVATE)
public class User {
private int id;
private int age;
private String username;
private String password;
}
- 只生成某一属性的
Getter和Setter,在类中定义
public class User {
@Getter
@Setter
private int id;
private int age;
private String username;
private String password;
}
- 不产生某一属性的Getter
@Getter(AccessLevel.NONE)
@Getter
@Setter
public class User {
private int id;
private int age;
private String username;
@Getter(AccessLevel.NONE)
private String password;
}
- 类中如果有静态的成员变量,被
static修饰,注解不起作用,只对成员变量起作用 -
final修饰只会产生Getter,不能修改所以不会产生Setter
ToString
如果查看成员变量的赋值情况,来覆写toString(),否则打印出的是该类的hash码
@ToString
public class User {
private int id;
private int age;
private String username;
private String password;
}
User(id=1, age=18, username=Mr.Q, password=123)
排除某一字段的输出
@ToString(exclude = {"password"})
指定输出字段
@ToString(of = {"password"})
Data
@Data:课代表注解
集成了Setter、Getter、toString()、equals()、hashCode()、@RequiredArgsConstructor指定参数(被@NonNUll 或者 无初值的final修饰)没有此注解默认为无参构造
@Data
public class User {
private int id;
private int age;
private String username;
private String password;
}
EqualsAndHashCode
@EqualsAndHashCodeequals()hashCode()
【小葵花代码课堂开课了】
hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致,那么equal()既然已经能实现对比的功能了,为什么还要hashCode()呢?
因为重写的equal()里一般比较的比较全面比较复杂,这样效率就比较低,而利用hashCode()进行对比,则只要生成一个hash值进行比较就可以了,效率很高,那么hashCode()既然效率这么高为什么还要equal()呢?
- 两个obj,如果
equals()相等,hashCode()一定相等 - 两个obj,如果
hashCode()相等,equals()则不一定相等(Hash散列值有冲突的情况)
判断两个对象是否相等的规则是:
- 如果
hashCode()相等,则查看第二步,否则不相等; - 查看
equals()是否相等,如果相等,则两obj相等,否则还是不相等
Constructor
@NoArgsConstructor:无参构造@RequiredArgsConstructor:指定参数(被@NonNUll 或者 无初值的final修饰)@AllArgsConstructor:全参构造
@NoArgsConstructor
public class User {
private int id;
private int age;
private String username;
private String password;
}
Builder
@Builder:链式编程给字段赋值
@Data
@Builder
public class User {
private int id;
private int age;
private String username;
private String password;
}
@Test
public void test() {
User user = User.builder().id(1).username("Mr.Q").password("123").age(18).build();
System.out.println(user);
}
User(id=1, age=18, username=Mr.Q, password=123)
Log
@Log:日志信息
@Builder
@Log
public class User {
private int id;
private int age;
private String username;
private String password;
public void fun(String s) {
log.info("test");
}
}
@Test
public void test() {
User user = User.builder().id(1).username("Mr.Q").password("123").age(18).build();
//打印类的日志信息
user.fun("test");
}
三月 21, 2020 5:43:33 下午 com.iqqcode.lombok.User fun
信息: test
Cleanup
@Cleanup:自动关闭流操作
@Test
public void test() throws IOException {
@Cleanup InputStream in = new FileInputStream("filePath1");
@Cleanup OutputStream out = new FileOutputStream("filePath2");
byte[] cache = new byte[1024];
while(true) {
int r = in.read(cache);
if(r == -1) break;
out.write(cache,0,r);
}
}
不用再写in.close(); 和 out.close();
其实不是不用写了,而是Lombok帮你写了。在 .class文件中,关闭流的操作还是存在的!
智能推荐
【java】Lombok的使用
介绍:lombok在编译entity文件时自动生成get set toString hashCode等方法,这样方法生成就不用写在代码里了,可以简化代码。 使用方法: 一、在pom文件里引入lombok的依赖 代码实现: 注: 也可以到maven官网复制,如图 二、在eclipse里安装Lombok 1、在命令框中通过cd指令找到maven仓库--》org --》projectlombok --》...
lombok的使用
使用 在idea中安装lombok插件 2. 在pom.xml中导入jar包 在实体类上加注解 @Data:无参构造,get、set、tostring、hashcode、equals @AllArgsConstructor@NoArgsConstructor lArgsConstructor@NoArgsConstructor...
Lombok的基本使用
介绍: Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产生干净,简洁且易于维护的Java类。 1.创建maven项目 2.导入如响应的jar几插件安装 1.导入依赖的jar包 2.让idea支持Lombok 3.进行使用 ...
lombok插件的使用
lombok可以通过使用注解的方式,代替getter/setter、logger等,简化项目中的代码。 引入依赖 在idea中安装lombok插件 常用注解 @Data,生成getter、setter和toString方法 @Getter @Setter @Slf4j,生成log对象...
Lombok的使用
1,Lombok使用步骤: 引入相应的maven包 2.添加IDE工具对Lombok的支持 IDEA中引入Lombok支持如下: 点击File-- Settings设置界面,安装Lombok插件: 点击File-- Settings设置界面,开启 AnnocationProcessors: 开启该项是为了让Lombok注解在编译阶段起到作用。 3.Lombok注解的使用 POJO类常用注解: @G...
猜你喜欢
Lombok的使用
简介 lombok是一个IDEA的插件,可以对编译器进行增强,可以使Java代码变得更加简洁、快速。 安装 到Maven仓库导入lombok的jar包 在这里的话我选择的是1.18.8版本 将代码块导入到项目的pom.xml文件中 在IDEA 中安装 lombok 插件 打开 idea>File>Setting>Plugin>Markplace>输入 Lombok回车...
Lombok的使用
概念 可以帮助实体类,快速采用注解方式生成对应get、set以及构造函数 步骤 1.引入lombok类库 2.下载lombok插件 setting中 安装好后要重启IDEA 使用方法 主要使用几个注解 @Getter //设置get方法 @Setter //设置set方法 @Data //设置get和set方法 @AllArgsConstructor //带所有参数的构造函数 @NoArgsCon...
lombok的使用
目录 简介 lombokd 使用 1.添加依赖 2.添加IDE工具对lombok的支持 3.常用注解 4.参考文档 简介 Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。 lombokd 使用 1.添加依赖 2.添加IDE工具对lombok的支持 3.常用注解 4.参考文档 官方文档: h...
lombok的使用
今日听朋友说起lombok的好处,于是就学着使用了lombok。他的主要作用是可以自动的帮我们 写 get set 还有 toString 方法。 lombok下载地址 下载执行运行该jar包 java -jar Lombok.jar 按照提示 选择ide 即可 项目需要在 引入 lombok ...
Linux内核之进程调度3:进程调度
1. 吞吐率和响应 吞吐:单位时间内做的有用功; 响应:低延迟。 吞吐追求的整个系统CPU做有用功,响应追求的是某个特定任务的延迟低; 1GHZ的CPU切换线程保存恢复现场约几个微妙级别,看似消耗不了太多时间,但是由于系统的局部性原理,会保存当前线程数据的缓存,切换线程会打乱局部性引起cache miss,而CPU访问cache速度远大于内存访问,这样综合看来上下文切换花销还是很大的。无用功占用较...
