lombok 绝地灬酷狼 2022-12-11 02:28 116阅读 0赞 为什么需要lombok Java项目中,充斥着太多不友好的代码:POJO的getter/setter/toString;这些样板代码既没有技术含量,写起来又比较麻烦,又影响着代码的美观,Lombok应运而生。 lombok引入方法 1)pom引入依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency> 2)添加IDE工具对Lombok的支持 IDEA中引入Lombok支持如下: 点击File-- Settings设置界面,plugins中安装Lombok插件: 点击File-- Settings设置界面,开启AnnocationProcessors中的 Lombok实现原理 自从Java 6起,javac就支持“JSR 269 Pluggable Annotation Processing API”规范,只要程序实现了该API,就能在javac运行的时候得到调用。 Lombok就是一个实现了"JSR 269 API"的程序。在使用javac的过程中,它产生作用的具体流程如下: 1. javac对源代码进行分析,生成一棵抽象语法树(AST) 2. javac编译过程中调用实现了JSR 269的Lombok程序 3. 此时Lombok就对第一步骤得到的AST进行处理,找到Lombok注解所在类对应的语法树 (AST),然后修改该语法树(AST),增加Lombok注解定义的相应树节点 4. javac使用修改后的抽象语法树(AST)生成字节码文件 Lombok注解的使用 POJO类常用注解: @Getter/@Setter: 作用类上,生成所有成员变量的getter/setter方法;作用于成员变量上,生成该成员变量的getter/setter方法。可以设定访问权限及是否懒加载等。 @ToString:作用于类,覆盖默认的toString()方法,可以通过of属性限定显示某些字段,通过exclude属性排除某些字段。 @EqualsAndHashCode:作用于类,覆盖默认的equals和hashCode @NonNull:主要作用于成员变量和参数中,标识不能为空,否则抛出空指针异常。 @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor:作用于类上,用于生成构造函数。 @Data:作用于类上,是以下注解的集合:@ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor @Builder:作用于类上,将类转变为建造者模式 @Cleanup:自动关闭资源,针对实现了java.io.Closeable接口的对象有效,如:典型的IO流对象 @SneakyThrows:可以对受检异常进行捕捉并抛出 缺点与坑 1)有坑 因为Lombok使代码开发非常简便,这就使得部分开发者对其产生过度依赖。在使用Lombok过程中,如果对于各种注解的底层原理不理解的话,很容易产生意想不到的结果。 举一个简单的例子,我们知道,当我们使用@Data定义一个类的时候,会自动帮我们生成equals()方法 。 如果只使用了@Data,而不使用@EqualsAndHashCode(callSuper=true)的话,会默认是@EqualsAndHashCode(callSuper=false),这时候生成的equals()方法只会比较子类的属性,不会考虑从父类继承的属性,无论父类属性访问权限是否开放。 2)影响升级 因为Lombok对于代码有很强的侵入性,就可能带来一个比较大的问题,那就是会影响我们对JDK的升级。 按照如今JDK的升级频率,每半年都会推出一个新的版本,但是Lombok作为一个第三方工具,并且是由开源团队维护的,那么他的迭代速度是无法保证的。 所以,如果我们需要升级到某个新版本的JDK的时候,若其中的特性在Lombok中不支持的话就会受到影响。 Lombok自身的升级也会受到限制,因为一个应用可能依赖了多个jar包,而每个jar包可能又要依赖不同版本的Lombok,这就导致在应用中需要做版本仲裁,而我们知道,jar包版本仲裁是没那么容易的,而且发生问题的概率也很高。 3)破坏封装性 以上几个问题,我认为都是有办法可以避免的。但是有些人排斥使用Lombok还有一个重要的原因,那就是他会破坏封装性。 众所周知,Java的三大特性包括封装性、继承性和多态性。 如果我们在代码中直接使用Lombok,那么他会自动帮我们生成getter、setter 等方法,这就意味着,一个类中的所有参数都自动提供了设置和读取方法。 参考:https://cloud.tencent.com/developer/article/1589073
相关 lombok 为什么需要lombok Java项目中,充斥着太多不友好的代码:POJO的getter/setter/toString;这些样板代码既没有技术含量,写起来又比较麻烦,又影响 绝地灬酷狼/ 2022年12月11日 02:28/ 0 赞/ 117 阅读
相关 lombok 转自:http://blog.csdn.net/mlinge/article/details/51340362 lombok是什么 lombok 是通过提供简单注 傷城~/ 2022年07月12日 06:56/ 0 赞/ 188 阅读
相关 lombok 转自:http://blog.csdn.net/mlinge/article/details/51340362 lombok是什么 lombok 是通过提供简单注 - 日理万妓/ 2022年07月12日 06:56/ 0 赞/ 187 阅读
相关 Lombok 【问题描述】 长假回来上班后的第一天,开发环境竟然出问题了。代码中所有的getter和setter方法都报错,显示各个实体类中没有提供对应的get/set方法。 ゝ一世哀愁。/ 2022年06月07日 03:44/ 0 赞/ 195 阅读
相关 Lombok https://www.jianshu.com/p/365ea41b3573 Lombok简介\\\ Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些 骑猪看日落/ 2022年06月02日 00:45/ 0 赞/ 244 阅读
相关 Lombok Lombok简介 > Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对 桃扇骨/ 2022年05月22日 00:23/ 0 赞/ 193 阅读
相关 Lombok 官网下载地址[https://projectlombok.org][https_projectlombok.org] lombok是一个可以帮助我们简化java代码编写的工具 以你之姓@/ 2022年05月18日 23:13/ 0 赞/ 219 阅读
相关 lombok lombok简介 lombok是暑假来到公司实习的时候发现的一个非常好用的小工具,刚见到的时候就感觉非常惊艳,有一种相见恨晚的感觉,用了一段时间之后感觉的确挺不错,所以特 阳光穿透心脏的1/2处/ 2022年05月17日 04:46/ 0 赞/ 190 阅读
相关 Lombok 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MOTUI/article/details/79012846 Lombok 港控/mmm°/ 2022年05月14日 16:45/ 0 赞/ 191 阅读
相关 Lombok 概述 Lombok 提供了一些注解来帮助我们简化消除一些必须有但显得臃肿的 java 代码,如 getting 和 setting,它是通过编译时字节码修改完成,性 素颜马尾好姑娘i/ 2021年09月10日 06:08/ 0 赞/ 368 阅读
还没有评论,来说两句吧...