
Spring boot Lombok
发布日期:2021-05-10 09:25:33
浏览次数:25
分类:精选文章
本文共 6038 字,大约阅读时间需要 20 分钟。
文章目录
Spring boot Lombok
上一节 Spring boot 参数校验
源码
简介
lombok 并不是spring 或者springboot的 ;这里写这一章节主要是为了后续代码中会经常用到,所以在此简单介绍和使用下。
lombok 是为了简化代码开发, 避免编写相对不太注重的代码,例如get set等;让代码更简洁;
不过 lombok 也有很大的争议,不过使用上很简单,学习也不费劲。看自己是否需求选择使用。idea 安装
直接在 设置中搜索 lombok安装重启即可

eclipse 安装
使用添加依赖
依赖
version 在springboot 2.x版本后可以不写,springboot 也管理了他的版本org.projectlombok lombok
常用注解
注解 | 说明 | 备注 |
---|---|---|
@UtilityClass | 标注在类上,类会标记为final,生成一个私有构造器,该类中的所有方法,内部类,以及字段都会标记为静态 | 工具类标注 |
@Slf4j | 标注在类上,可以使用log 进行日志输出,同理还有@Log4j ,@log4j2 等支持不同的日志框架 | 日志打印 |
@Data | 标注了 @Data的类,会生成getter ,setter, 方法以及无参构造器,全部参数构造器, tostring方法,equal和 hashCode方法 | 实体bean的常用方法 |
@Getter | 修饰类或者字段,生成getter方法 | getter |
@Setter | 修饰类或者字段,生成setter方法 | setter |
@Accessors | 修饰类或者字段,配置@setter或者@Data使用,并且可定制化方法的前缀,以及chain=true设置为链调用 | 当链式调用set方法的时候比较适用 |
@EqualsAndHashCode | 修饰类,生成equals 和hashcode方法 | |
@AllArgsConstructor | 修饰类,生成所有参构造器 | |
@NoArgsConstructor | 修饰类,生成无参构造器 | |
@RequiredArgsConstructor | 修饰类, 生成无参和所有参构造器 | |
@ToString | 修饰类,生成tostring 方法 | |
@NonNull | 检测参数是否为空,抛出NullPointerException | null校验 |
@Cleanup | 修饰局部变量,清除资源,默认调用资源的close方法 | 清除资源使用 |
@SneakyThrows | 修饰方法,抛出异常 | |
@Synchronized | 修饰方法,方法会自动被synchronized修饰 | 用处不大 |
@val | 修饰局部变量,变量会变成不可从新赋值,和final作用一致 | |
@var | 修饰局部变量,例如 var a = 10 ;可以自动类型推断 | java11 已经实现 |
常用示例
@UtilityClass 和 @Slf4j 的使用
@UtitityClass 修饰类,表示这是一个工具类
@Slf4j 修饰类;表示可以使用Slf4j的日志输出,不用在代码中写 loggerFactory.getLogger… 的模板代码了@UtilityClass@Slf4jpublic class StringUtil { public int length(String str) { log.info("str length "); return str.length(); }}
对比生成的class
对比下, 类被final 修饰,方法变为static; 并且生成私有构造器; @Slf4j 也生成了logpublic final class StringUtil { private static final Logger log = LoggerFactory.getLogger(StringUtil.class); public static int length(String str) { log.info("str length "); return str.length(); } private StringUtil() { throw new UnsupportedOperationException("This is a utility class and cannot be instantiated"); }}
@Accessors
@Accessors(chain = true) // 通过chain=true,生成链式set调用@Setterpublic class AccessorsTest { private String name; private Date createTime;}
class
setter方法会返回this 当前对象;这样就可以 obj.setx().sety()…;链式setterpublic class AccessorsTest { private String name; private Date createTime; public AccessorsTest() { } public AccessorsTest setName(final String name) { this.name = name; return this; } public AccessorsTest setCreateTime(final Date createTime) { this.createTime = createTime; return this; }}
@NonNull
参数null 校验
@Slf4j@Setterpublic class NonNullTest { // 修饰字段,生成的setter方法会进行null校验 @NonNull private String str; // 修饰构造器 public NonNullTest(@NonNull String str) { } // 修饰普通方法 public String upperCase(@NonNull String str) { return str.toUpperCase(); } // 修饰静态方法 public static String upperCase2(@NonNull String str) { return str.toUpperCase(); }}
class
会进行字段或者参数是否为空的判断public class NonNullTest { private static final Logger log = LoggerFactory.getLogger(NonNullTest.class); @NonNull private String str; public NonNullTest(@NonNull String str) { if (str == null) { throw new NullPointerException("str is marked non-null but is null"); } } public String upperCase(@NonNull String str) { if (str == null) { throw new NullPointerException("str is marked non-null but is null"); } else { return str.toUpperCase(); } } public static String upperCase2(@NonNull String str) { if (str == null) { throw new NullPointerException("str is marked non-null but is null"); } else { return str.toUpperCase(); } } public void setStr(@NonNull final String str) { if (str == null) { throw new NullPointerException("str is marked non-null but is null"); } else { this.str = str; } }}
@Cleanup @SneakyThrows
@SneakyThrows 抛出异常,简化了我们在方法上throws exception;作用不是很大,还是手动试用感觉异常清晰明了
@Cleanup清除资源;例如 调用 io的close 方法释放资源@SneakyThrows public static void readFile(File file) { @Cleanup FileInputStream fileInputStream = new FileInputStream(file); }
class
public static void readFile(File file) { try { FileInputStream fileInputStream = new FileInputStream(file); if (Collections.singletonList(fileInputStream).get(0) != null) { fileInputStream.close(); } } catch (Throwable var2) { throw var2; } }
不过jdk7 以后多使用 try-with-resource模式
try (FileInputStream fileInputStream = new FileInputStream(file)) { }
@val @var
public void varTest() { var a = 1; // 声明为局部变量,可以自动类型推断 var b = 2; System.out.println(a + b); } public void valTest() { val str = "aaa"; // 声明为常量 //str = "Bbb"; // 再次赋值的时候,编译不过去 }
getter,setter 使用问题;这个在开发中是很常见的一种错误,建议多看看
getter,setter 使用
@Getter@Setterpublic class GetSetTest { // 第一个字母小写,第二个字母大写, //我们不使用lombaok,按照java规范生成的get,set //( 如果属性名的第一个字母是小写且第二个字母大写,那么该属性名直接用作 // getter/setter 方法中 get/set 的后部分,就是说大小写不变。例如属性名为uId,方法是getuId,setuId private String uId; // 前两个或者多个字符是小写(驼峰规范); 生成的getset 为属性第一个字母 //变大写,例如 name, getName, setName private String name; private Integer myAge; public String getuId() { return uId; } public void setuId(String uId) { this.uId = uId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getMyAge() { return myAge; } public void setMyAge(Integer myAge) { this.myAge = myAge; }}
我们使用lombok生成
... public String getUId() { return this.uId; } public void setUId(final String uId) { this.uId = uId; }
如果第一个字母是小写,第二个字母是大写,lombok和 java生成的getset方法是不一样的;基于这一点spring 或者其他框架, 在给属性赋值的时候会出现问题
以上就是Lombok的简单运用和 一些问题;是一个辅助我们开发简洁的工具。
下一节 Spring boot jdbcTemplate
发表评论
最新留言
很好
[***.229.124.182]2025年04月01日 15时59分45秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
JavaScript——原生
2021-05-11
vue动态组件与插件到底是什么?
2021-05-11
手写Promise源码
2021-05-11
还不知道做什么项目的看这里,【总结全网】Python入门实战项目
2021-05-11
【2021.5.8 NOI模拟】贪心
2021-05-11
python3下安装jupyter kernel报错问题
2021-05-11
计算机网络参考模型,图文详解,更懂你!
2021-05-11
BNUZ程协技术部2020寒假任务简单版(后端)
2021-05-11
关于C++构造函数与析构函数的一些问题
2021-05-11
关于手机ping电脑和电脑ping手机
2021-05-11
mybatis 简单学习
2021-05-11
操作系统学科复习图
2021-05-11
202l
2021-05-11
数据结构知识清单简要
2021-05-11
P1226 【模板】快速幂||取余运算
2021-05-11
pandas最后出现的gotchas问题的原因及解决方法
2021-05-11
机器学习分类算法模型评价指标
2021-05-11
LeetCode197.打家劫舍
2021-05-11