侧边栏壁纸
博主头像
孔子说JAVA博主等级

成功只是一只沦落在鸡窝里的鹰,成功永远属于自信且有毅力的人!

  • 累计撰写 297 篇文章
  • 累计创建 134 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

IDEA使用lombok配置, 解决pom.xml添加 provided报红问题

孔子说JAVA
2021-09-09 / 0 评论 / 0 点赞 / 207 阅读 / 4,081 字 / 正在检测是否收录...

lombok是开源的代码生成库,通过简单注解方式可以简化java中的模版化代码,是一款非常实用的小工具。

项目中经常使用bean,entity等类,绝大部分数据类中都需要get、set、toString、equals和hashCode方法,虽然eclipse和idea开发环境下都有自动生成的快捷方式,但自动生成这些代码后,如果bean中的属性一旦有修改、删除或增加时,需要重新生成或删除get/set等方法,给代码维护增加负担。而使用了lombok则不一样,使用了lombok注解(@Setter,@Getter,@ToString,@@RequiredArgsConstructor,@EqualsAndHashCode或@Data)之后,就不需要编写或生成get/set等方法,很大程度上减少了代码量,而且减少了代码维护的负担。故强烈建议项目中使用lombok,去掉bean中get、set、toString、equals和hashCode等方法的代码。

1、相关资源

lombok官网: https://projectlombok.org/

lombok在GitHub的源码: https://github.com/mplushnikov/lombok-intellij-plugin

2、IntelliJ IDEA安装配置lombok插件

若想在开发工具IntelliJ IDEA中使用lombok注解,需要安装lombok插件,使idea可以识别注解,避免代码编译错误。

2.1 打开Settings界面

打开IntelliJ IDEA后点击菜单栏中的File–>Settings,或者使用快捷键Ctrl+Alt+S进入到Settings设置页面。

image-1648808373871

2.2 安装lombok插件

点击Settings设置页面左侧的Plugins,在右侧选择Browse repositories…,然后在搜索页面输入lombok便可以查询到下方的Lombok Plugin,鼠标点击Lombok Plugin可在右侧看到Install按钮,点击该按钮便可安装。安装或安装后的页面可以看到lombok具体支持的所有注解。

image-1648808382809

安装成功后我们可以看到右侧的Restart按钮,此时可先不操作,因为我们还有后续的配置工作。安装完成后我们再回到Plugins,此时在右侧可以搜索到lombok,而安装前是不行的。

image-1648808389695

2.3 配置注解处理器

在Settings设置页面,我们点击Build,Execution,Deployment–>选择Compiler–>选中Annotation Processors,然后在右侧勾选Enable annotation processing即可。

image-1648808430521

3、lombok插件的使用

3.1 pom文件引入相应的maven包

Lombok的scope=provided,说明它只在编译阶段生效,不需要打入包中。Lombok仅是在编译期将带Lombok注解的Java文件正确编译为完整的Class文件。

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.10</version>
    <scope>provided</scope>
</dependency>

3.2 编写POJO类使用lombok注解

以下代码会自动生成constructor、getter、setter、toString、equals、hash等方法。在idea中按下Ctrl+F12就可以看到Lombok已经为我们自动生成了一系列的方法。

import lombok.Data;

@Data
public class Customer {
    private Long id;
    private String customerName;
    private String gender;
    private String telephone;
    private String registerTime;
}

4、pom.xml添加 provided报红问题

在pom中添加lombok依赖时,指定了 provided。provided的含义是这个依赖只在编译和测试的时候使用,在打包运行的时候不用,这是用来避免包冲突的。添加好依赖后,如果编译和测试的时候并不能找到这个依赖包,导致本地运行出错,则需要做如下配置。

4.1 idea中打开应用的配置界面

image-1648808507483

4.2 选中支持Provided的复选框(只对当前项目有效)

选中include dependencies with “Provided” scope前面的复选框,注意该配置只对当前项目有效。

image-1648808518824

4.3 选择 templates—> Application(其他类似)

若只配置当前项目的支持,该步骤可以忽略。

image-1648808538130

5、lombok常用注解

1、@Getter/@Setter: 作用类上,生成所有成员变量的getter/setter方法;作用于成员变量上,生成该成员变量的getter/setter方法。可以设定访问权限及是否懒加载等。

2、@ToString:作用于类,覆盖默认的toString()方法,可以通过of属性限定显示某些字段,通过exclude属性排除某些字段。例如@ToString(exclude=”id”)排除id属性,或者@ToString(callSuper=true, includeFieldNames=true)调用父类的toString方法,包含所有属性。

3、@EqualsAndHashCode:作用于类,覆盖默认的equals和hashCode,按Ctrl + F12可以看到三个方法canEqual(OBject),Equals(Object),hashCode()。

4、@NonNull:主要作用于成员变量和参数中,标识不能为空,否则抛出空指针异常NPE(NullPointerException)。

5、@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor:作用于类上,用于生成构造函数。有staticName、access等属性。staticName属性一旦设定,将采用静态方法的方式生成实例,access属性可以限定访问权限。

@NoArgsConstructor:生成无参构造器。

@RequiredArgsConstructor:生成包含final和@NonNull注解的成员变量的构造器。

@AllArgsConstructor:生成全参构造器。

6、@Data:作用于类上,是以下注解的集合:@ToString、 @EqualsAndHashCode、 @Getter、 @Setter、 @RequiredArgsConstructor。

7、@Value:用在类上,是@Data的不可变形式,相当于为属性添加final声明,只提供getter方法,而不提供setter方法

8、@Builder:作用于类上,将类转变为建造者模式。

9、@Log:作用于类上,生成日志变量。针对不同的日志实现产品,有不同的注解。根据不同的注解生成不同类型的log对象,但是实例名称都是log,有六种可选实现类。

  • @CommonsLog Creates log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
  • @Log Creates log = java.util.logging.Logger.getLogger(LogExample.class.getName());
  • @Log4j Creates log = org.apache.log4j.Logger.getLogger(LogExample.class);
  • @Log4j2 Creates log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
  • @Slf4j Creates log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
  • @XSlf4j Creates log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);

10、@Cleanup:自动关闭资源,针对实现了java.io.Closeable接口的对象有效,如:典型的IO流对象。

11、@SneakyThrows:可以对受检异常进行捕捉并抛出,而无需显式在方法上使用throws语句。

12、@Synchronized:用在方法上,将方法声明为同步的,并自动加锁,而锁对象是一个私有的属性locklock或LOCK,而java中的synchronized关键字锁对象是this,锁在this或者自己的类对象上存在副作用,就是你不能阻止非受控代码去锁this或者类对象,这可能会导致竞争条件或者其它线程错误。

6、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)生成字节码文件
0

评论区