1.Lombok简介
Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。
官方地址:https://projectlombok.org/
github地址:https://github.com/rzwitserloot/lombok
2.Lombok安装
使用 lombok 是需要安装的,如果不安装,IDE 则无法解析 lombok 注解。
(1).eclipse/myeclipse手动安装Lombok【没有使用过此方法】
1>.将 lombok.jar 复制到 myeclipse.ini / eclipse.ini
2>. 打开 eclipse.ini / myeclipse.ini,在最后面插入以下两行并保存:
-Xbootclasspath/a:lombok.jar
-javaagent:lombok.jar
3>.重启 eclipse / myeclipse
(2).eclipse/myeclipse手动Gradle/Maven依赖安装Lombok【使用过此方法】
1>.添加依赖
//gradle依赖如下
compile "org.projectlombok:lombok:1.16.16"
//maven依赖如下
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.16</version>
</dependency>
//添加依赖后重新构建
2>.安装Lombok
//成功构建后,找到lombok的依赖包——lombok-1.16.16.jar
//选中该jar包,右键单击——>Run As——>Java Application——> 弹出Installer对话框
//在该对话框这选择你所使用的eclipse/myeclipse安装路径(即eclipse.exe或myeclipse.exe)后,单击Install/Update,当该对话框显示“Successfully”时,表明你已安装成功
3>.重启 eclipse/myeclipse
3.注解介绍
下面只是介绍了几个常用的注解,更多的请参见: https://projectlombok.org/features/index.html。
// @Getter / @Setter
//可以作用在类上和属性上,放在类上,会对所有的非静态(non-static)属性生成Getter/Setter方法,放在属性上,会对该属性生成Getter/Setter方法。并可以指定Getter/Setter方法的访问级别。
// @EqualsAndHashCode
//默认情况下,会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性。
// @ToString
//生成toString方法,默认情况下,会输出类名、所有属性,属性会按照顺序输出,以逗号分割。
// @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor
//无参构造器、部分参数构造器、全参构造器,当我们需要重载多个构造器的时候,Lombok就无能为力了,并且Lombok对父级的成员变量不起作用。
// @Data
// @ToString, @EqualsAndHashCode, 所有属性的@Getter, 所有non-final属性的@Setter和@RequiredArgsConstructor的组合,通常情况下,我们使用这个注解就足够了。
// @Slf4j
//注解在类上;为类提供一个 属性名为log 的 Slf4j 日志对象
4.注解实战
(1).POJO类级别使用@NoArgsConstructor、@AllArgsConstructor、@Getter、@Setter
import java.util.List;
import com.wei.you.zhihu.spider.utils.IdEntity;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* 知乎问题对象实体
*
* @author sunzc
*
* 2017年6月7日 下午8:06:59
*/
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public class Question extends IdEntity {
/**
* 序列号
*/
private static final long serialVersionUID = 7634824664882839328L;
// 问题
private String question;
// 问题描述
private String questionDesc;
// 问题链接
private String url;
// 问题作者
private String author;
// 问题答案
private List<Answer> answers;
}
(2).Controller类级别使用@Slf4j
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.ResourceAccessException;
import com.wei.you.zhihu.spider.dto.ResultDTO;
import com.wei.you.zhihu.spider.exception.ZhihuOptException;
import lombok.extern.slf4j.Slf4j;
/**
* 异常处理
*
* @author sunzc
*
* 2017年6月7日 下午8:59:30
*/
@Slf4j
public class BaseApiController {
protected ResponseEntity<ResultDTO> defaultFallback(Throwable e) {
String errorMsg;
String code = "300";
if (e instanceof ZhihuOptException) {
errorMsg = e.getMessage();
} else if (e instanceof ResourceAccessException) {
errorMsg = "节点连接失败";
code = "500";
} else {
errorMsg = "服务发生错误";
code = "500";
}
ResponseEntity<ResultDTO> resultDto = new ResponseEntity<ResultDTO>(
new ResultDTO().result(code).errorMsg(errorMsg), HttpStatus.OK);
log.error("**** 发生异常 ****", e);
return resultDto;
}
}
5.项目的开源地址