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

转自:IDEA使用lombok配置, 解决pom.xml添加 provided报红问题,更好体验:http://www.kongzid.com/

目录

 

1、相关资源

2、IntelliJ IDEA安装配置lombok插件

2.1  打开Settings界面

2.2  安装lombok插件

2.3  配置注解处理器

3、lombok插件的使用

3.1 pom文件引入相应的maven包

3.2 编写POJO类使用lombok注解

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

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

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

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

5、lombok常用注解

6、lombok实现原理


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官网

lombok在GitHub的源码

2、IntelliJ IDEA安装配置lombok插件

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

2.1  打开Settings界面

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

2.2  安装lombok插件

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

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

2.3  配置注解处理器

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

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

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

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

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

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

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

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:用在方法上,将方法声明为同步的,并自动加锁,而锁对象是一个私有的属性$lock或$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)生成字节码文件

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是对应的步骤: 1. 使用 IntelliJ IDEA 新建 Maven Web 项目 ex08。 2. 在 pom.xml 文件的 <dependencies/> 元素中加入相关依赖信息,如下所示: ```xml <dependencies> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.9</version> </dependency> <!-- Jackson --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.4</version> </dependency> <!-- JSTL --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- Servlet API --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> <!-- JUnit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> </dependencies> ``` 3. 在 pom.xml 文件的 <plugins/> 元素中加入 tomcat 插件配置信息,如下所示: ```xml <build> <plugins> <!-- Tomcat plugin --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8080</port> <path>/</path> </configuration> </plugin> </plugins> </build> ``` 4. 在 src/main/resources 中创建 config 文件夹,并在其中创建 Spring MVC 配置文件 spring-mvc.xml,如下所示: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 配置组件扫描 --> <context:component-scan base-package="com.example.ex08" /> <!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 配置消息转换器 --> <mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="com.fasterxml.jackson.databind.ObjectMapper"> <property name="dateFormat"> <bean class="java.text.SimpleDateFormat"> <constructor-arg value="yyyy-MM-dd HH:mm:ss" /> </bean> </property> </bean> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> </beans> ``` 5. 在 web.xml 文件中,加入前端控制器的配置,如下所示: ```xml <web-app version="4.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"> <!-- 配置 Spring MVC 前端控制器 --> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:config/spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> ``` 以上就是使用 IntelliJ IDEA 新建 Maven Web 项目 ex08,并配置 Spring MVC 的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孔子-说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值