lombok使用及相关知识点

相信大家编写数据库-代码映射类或者转换类的时候对大量的get/set方法或多或少感觉到厌倦,毕竟可能都希望自己的代码简洁有效,而不是创造一大堆重复的轮子。这个时候lombok的出现,就拯救了像笔者这样喜欢用简单的代码实现相应的功能的程序猿。

笔者开发环境:

  • Idea2022
  • JDK11
  • Maven-3.8.6

基础配置: 

        Idea-lombok配置:

                1.安装lombok插件,在Idea插件商店里面查找lombok插件,安装即可。较新版本的Idea软件安装自带lombok插件,此举是为了保证源码能够找到方法的定义,否则会导致代码编译失败 

                2.在项目中引入lombok的jar包,如果是maven项目的话直接增加依赖即可。如果是非maven项目则下载jar,引入classPath

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version>
    <!-- 在编译和测试时提供功能,无需传递至jar -->
    <scope>provided</scope>
</dependency>

        Eclipse-lombok配置:

                1.下载jar,并且通过java -jar命令启动lombok.jar。通过弹出的安装界面安装lombok到相应eclipse,类似于idea安装lombok的作用 

                2.将lombok.jar引入项目,请看上文

lombok相关知识:

        lombok中的注解及关键字(Version1.18.24):

  • val:根据上下文推断出当前变量的类型,并且用final来修饰变量,类似于Java 10支持的var关键字
  • var:根据上下文推断出当前变量的类型,类似于Java 10支持的var关键字
  • @NonNull:针对变量进行null检查,一旦出现异常则抛出NPE
  • @Cleanup:修饰变量之后,可以在程序运行结束之后调用close方法。需要保证变量类型实现了close方法,如:流
  • @Getter/@Setter:生成成员变量的get/set方法
  • @ToString:自动生成toString方法
  • @EqualsAndHashCode:自动生成equals和hashcode方法
  • @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor:生成构造器

                1.@NoArgsConstructor:生成无参构造方法

                2.@AllArgsConstructor:生成包含类中全部属性的构造方法

                3.@RequiredArgsConstructor:生成只包含类中final修饰或者non-null注解修饰字段的构造方法

  • @Data:包含@ToString,、@EqualsAndHashCode,、@Getter、@Setter、@RequiredArgsConstructor的功能
  • @Value:包含@ToString、@EqualsAndHashCode、@Getter、@RequiredArgsConstructor的功能。生成一个具有私有化构造方法的不可变类,并且生成返回类型为当前对象的静态方法,方法名为@Value(staticConstructor = "name")中的name值
  • @Builder:作用于类,改造成建造者模式
  • @SneakyThrows:将方法抛出的checked异常,包装成RuntimeException(unchecked异常),使得方法不用显示处理异常信息
  • @Synchronized:为方法隐式创建静态锁,相当于锁住this对象
  • @With:为成员变量生成with+成员变量名的构造方法,该with前缀的构造方法能在初始化时自定义成员变量的初始值,而不能修改其他成员变量初始值。前提是成员变量没有被@NonNull修饰
  • @Getter(lazy=true):针对初始化需要大量运算的成员变量进行缓存形式的初始化
  • @Log:生成一个日志对象,相关注解包含@CommonsLog、@Flogger、@JBossLog、@Log、@Log4j、@Log4j2、@Slf4j、@XSlf4j、@CustomLog(自定义日志框架),具体的使用还是要看读者项目中的日志框架是什么
  • experimental:还处于实验性质的注解,感兴趣的小伙伴可以查询官方API

        lombok实现原理: 

        大家从上面的描述可以知道lombok其实不需要打到实际项目中,它的作用是在代码编译时解析相关注解,修改字节码以达到我们需要的增强性效果。让我们来看看如果没有 lombok的时候,javac会如何编译程序:

  • javac对项目代码进行分析,生成一棵抽象语法树abstract syntax tree(AST)
  • javac使用抽象语法树(AST)生成字节码文件,程序就已经编译结束了

        而lombok则是通过实现JSR 269: Pluggable Annotation Processing API (编译期注解处理器),在编译项目时把Lombok的注解代码,转换为常规的Java方法。那这一步就是在上面的一二两步中间完成,修改原AST,生成增强过后的AST。javac则通过修改后的AST生成代码,完成注解需要实现的功能。

在项目中是否应该使用lombok:

        这一块众说纷纭,所以笔者记录一下使用lombok的优缺点,供读者选择

        使用lombok:

                优点:

                简化开发,减少开发时间

                缺点:

                1.降低代码的可阅读性,需要学习相关注解后使用

                2.拉长项目的编译时间,代码编译器需要消耗更多内存

                3.降低代码的调试性,虽然注解优化了原本的代码逻辑,但同时也导致这部分代码无法进行调试

                4.破坏封装性,因为属性对外本来是通过自定义set/get方法来暴露,但是通过@Data就全部暴露出去了

                5.升级JDK可能会出现问题,因为现在lombok是通过修改AST语法树进行字节码更改,未来JDK堵住这块就用不上了

        综上,就笔者来看,lombok适合小型、快速开发的项目。但是对于大型且需要许多人同步开发的项目,最好还是手动进行代码处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值