Lombok, 一个Java开发必备效率工具,可以大大避免编写一些常用方法(get/set, hashcode等),简化开发。虽然现在IDE很多都可以通过快捷键生成POJO的一些方法了,但是如果该POJO字段发生变动后,还是需要程序员再次手动重新生成相关方法。而Lombok只需要使用注解即可,且是在代码编译期间将注解替换为相应的代码,而非通过反射。同时会使得源码文件更简洁

配置

IDEA环境下的的Lombok的配置:

1. 首先在Maven中添加Lombok包

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.8</version></dependency>

2. 在IDEA的Plugins Marketplace 中搜索安装 IntelliJ Lombok plugin 插件

POJO 方法

POJO类的很多方法get、setequals、canEquals、hashCode、toStringConstructor 都可以通过Lombok的相关注解实现

@Data 注解

放置在类上,为该类的所有属性添加get、set方法,为该类添加equals、canEquals、hashCode、toString方法。非常适用于POJO类。

示例源码如下:

@Data
class Pc1 implements Serializable
{private static final long serialVersionUID = 1;private int id;private double prcie;private String pcname;
}

编译后class文件如下,可以看到提供了上述提到的所有方法,并且源码依然很简洁

Note:

如果无构造器方法,Java会提供一个默认的无参构造器。所以class文件中的那个无参构造器可不是Lombok的功劳哦~

@Getter, @Setter 注解

  • 放置在属性上,为该属性添加Get/Set方法

示例源码如下:

class Pc2 implements Serializable
{private static final long serialVersionUID = 1;private int id;@Setterprivate double prcie;@Getterprivate String pcname;
}

编译后class文件如下,可以看到字段上添加了相应的方法

  • 放置在类上,则为该类的所有属性添加Get/Set方法

@EqualsAndHashCode 注解

放置在类上,为该类添加equals、canEqual、hashCode方法

示例源码如下:

@EqualsAndHashCode
class Pc5 implements Serializable
{private static final long serialVersionUID = 1;private int id;private double prcie;private String pcname;
}

编译后class文件如下,该类添加了equals、canEqual、hashCode方法

@ToString 注解

放置在类上,为该类添加toString方法

示例源码如下:

@ToString
class Pc6
{private int id;private double price;private String pcname;
}

编译后class文件如下,该类添加了toString方法

构造器: @AllArgsConstructor 注解

放置在类上,为该类添加一个全参构造器。需要注意的是:由于此时已经有构造器了,Java不再提供无参构造器

示例源码如下:

@AllArgsConstructor
class Pc3 implements Serializable
{private static final long serialVersionUID = 1;private int id;private double prcie;private String pcname;
}

编译后class文件如下,该类添加了一个全参构造器

构造器: @NoArgsConstructor 注解

放置在类上,为该类添加一个无参构造器

示例源码如下:

@NoArgsConstructor
class Pc4 implements Serializable
{private static final long serialVersionUID = 1;private int id;private double prcie;private String pcname;
}

编译后class文件如下,该类添加了一个无参构造器

@NonNull

放置在属性上,将对该属性进行非空检查,如果为空(null),将会抛出NullPointerException;同时为该类添加一个由所有@NonNull属性组成的有参构造器。需要注意的是:由于此时已经有构造器了,Java不再提供无参构造器

示例代码如下:

@Data
class Pc7
{@NonNullprivate Integer id;private double price;private String pcname;
}

编译后class文件如下,该类中对id属性的操作均进行了非空检查,添加了一个所有@NonNull属性组成(id属性)的有参构造器

@RequiredArgsConstructor 注解 简化依赖注入

通常我们在实现Spring依赖注入,常常是在需要注入的属性添加@Autowired注解实现(如下所示)。但如果一个类下有很多属性需要注入时,@Autowired就要写一堆了……

...@Controllerpublic class Controller1{@Autowiredprivate Service1 service1;@Autowiredprivate Service2 service2;...}

这里可以使用这里@RequiredArgsConstructor注解来简化依赖注入操作:首先需要将该注解放在类上,然后在 需要注入的属性前添加final(用法1) 或 在需要注入的属性上添加注解@NonNull(用法2)

对上述示例的改进写法如下:

...@RequiredArgsConstructor(onConstructor = @__(@Autowired))@Controllerpublic class Controller1{// 用法 1private final Service1 service1;// 用法 2@NonNullprivate Service2 service2;...}

用法1 和 用法2 虽然效果一样,但是很明显用法1更常用……

log对象

@Log4j

放置在类上,为该类添加一个属性名为log的Log4J日志对象

示例源码如下:

@Log4jpublic class Student {        private int id;private String username;private String sex;private String address;...}

编译后的class文件如下,该类添加了一个属性名为log的Log4J日志对象

@Slf4j

放置在类上,为该类添加一个属性名为log的SLF4J日志对象

示例源码如下:

import lombok.extern.slf4j.Slf4j;@Slf4jpublic class User {private int id;private String name;private int age;public int getAge() {log.error("SLF4J getAge: " + age );log.debug("SLF4J getAge: " + age );return age;}...}

编译后的class文件如下,该类添加了一个属性名为log的SLF4J日志对象

lombok有参构造注解_Java高效开发工具: Lombok相关推荐

  1. 高效开发工具使用技巧

    目录 1. ipaddress.com的正确使用,提高github等国外站点访问效率 2.利用码云克隆github项目,耗时5分钟 3.高效的windows/win使用技巧 1.mklink目录资源引 ...

  2. 帆软 JAVA扩展_java报表开发工具FineReport教程之报表设计:单元格扩展

    java报表开发工具FineReport教程之报表设计:单元格扩展 报表设计章节适用于对报表业务有一定的了解,需要学习FineReport报表的初学者. 通过该章节的学习,可以掌握设计器的使用,了解报 ...

  3. java中Long类型传参校验注解_JAVA——实现json bean实体类的传参校验模板及注解详解...

    关注wx:CodingTechWork,一起学习进步. 引言 在java开发中,经常需要和外界系统进行参数对接,api设计中难免会遇到json传参不一致的情况,虽然纸面或者接口规范约束了应该怎么传参, ...

  4. 【高效开发工具系列】uTools介绍与使用

    一.基本使用 最简单的,uTools 可以作为一个程序快速启动器,支持英文.英文驼峰.中文拼音.拼音首字母来打开你的本地程序.除程序外, win10+ 和 macOS 用户还可以快速搜索并打开「控制面 ...

  5. 【高效开发工具系列】API工具

  6. 【高效开发工具系列】Windows 怎么使用 telnet

  7. IDEA常用高效开发工具——screw一键生成数据库文档

    screw [介绍:一键生成数据库文档,从此告别人工整理文档] a:数据库支持: MySQL MariaDB TIDB Oracle SqlServer PostgreSQL Cache DB b:配 ...

  8. 【高效开发工具系列】Windows 修改 host 文件

  9. Java程序员必备的几款开发工具,高效才是硬道理!

    作为一名优秀的Java程序员,怎能没有几款得心应手的高效开发工具呢!市面上类库.工具千千万,下面我就给大家推荐几款高效的Java开发工具. 一.Eclipse Eclipse做为一款开发源代码的Jav ...

最新文章

  1. Java编程操作Excel的一种方法
  2. C语言实现的Web服务器(转-kungstriving)
  3. NGUI 使用Grid自动排列UI
  4. 牛客网 【每日一题】5月11日题目精讲 Moovie Mooving
  5. SpringMVC自动配置
  6. 内存泄漏——内存溢出区别
  7. C#-老生常谈的 值类型与引用类型
  8. Python+OpenCV:仿射变换和透射变换
  9. 团队编程项目作业4-开发文档
  10. 金融私有云基础架构方案评估(架构与存储篇)
  11. 【已解决】maven打包时xxx.xxx程序包不存在
  12. 生命是一个无解的谜——《我喜欢生命本来的样子》读后感作文2100字
  13. 【收藏】如何优雅的在 Python设置报警通知(邮件、短信、电脑外放声音)
  14. 3D美术人员Technical Artist(TA技术美术)的学习之旅(3)
  15. 有n个人围成一圈,从第1个人开始,1、2、3报数,报至3出局,余下的人继续从1、2、3报数,问:最后剩下的一人是原来的第几号?同时求出被淘汰编号的序列。(要求:用循环队列解决该问题。)
  16. SAP 什么是统驭科目
  17. 仿ifeng可翻阅上下滚动新闻
  18. 大疆创新 java面试_如何成功应聘大疆创新科技?
  19. GPS时间同步系统揭秘各种时间同步方式
  20. Python基础知识之2——字典

热门文章

  1. php中二进制函数,PHP-----函数和二进制
  2. oracle不属于集合操作,Oracle的几个集合操作
  3. 【常见笔试面试算法题12续集四】动态规划算法案例分析4 LCS练习题练习题(最长公共子序列的长度)
  4. 用示例说明BitMap索引的效率要优于B-Tree索引
  5. 微信小程序image组件中aspectFill和widthfix模式应用详解
  6. datatables 的导出button自定义
  7. NopCommerce用.net core重写ef
  8. python 爬虫002-http与urllib2
  9. 《Linux内核》课本读书笔记 第三章
  10. ibatis的简介与初步搭建应用