写在最前
ProjectLombok 是一个 Java 库,可以自动插入到编辑器和构建工具中,提高java的性能。–来自 Lombok 官网
本文在【基础篇】SpringBoot 配置文件详解代码基础上使用 lombok 优化代码!
代码地址
mingyue-springboot-base-lombok
IDEA 安装 Lombok 插件
参考IDEA常用插件推荐安装插件的方式安装 Lombok 插件(IDEA 高版本已经默认安装了 Lombok 插件)。
项目也需要引入依赖
<!--lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
Lombok 妙用
@Data
替换 get/set 方法
// 原代码
@Component
@ConfigurationProperties(prefix = "mingyue")
public class MingYueUserProperties {
private Long id;
private String name;
private String sex;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "MingYueUserProperties{"
+ "id="
+ id
+ ", name='"
+ name
+ '\''
+ ", sex='"
+ sex
+ '\''
+ '}';
}
}
// Lombok 介入的代码
@Data
@Component
@ConfigurationProperties(prefix = "mingyue")
public class MingYueUserProperties {
private Long id;
private String name;
private String sex;
@Override
public String toString() {
return "MingYueUserProperties{"
+ "id="
+ id
+ ", name='"
+ name
+ '\''
+ ", sex='"
+ sex
+ '\''
+ '}';
}
}
启动项目验证接口数据是否正确:http://localhost:8090/mingYue
@ToString
替换 toString 方法
// 原代码
@Data
@Component
@ConfigurationProperties(prefix = "mingyue")
public class MingYueUserProperties {
private Long id;
private String name;
private String sex;
@Override
public String toString() {
return "MingYueUserProperties{"
+ "id="
+ id
+ ", name='"
+ name
+ '\''
+ ", sex='"
+ sex
+ '\''
+ '}';
}
}
// Lombok 介入的代码
@Data
@ToString
@Component
@ConfigurationProperties(prefix = "mingyue")
public class MingYueUserProperties {
private Long id;
private String name;
private String sex;
}
启动项目验证接口数据是否正确:http://localhost:8090/mingYue
@SneakyThrows
异常处理
// 原代码
@GetMapping("/mingYue")
public String mingYue(Integer type) throws Exception {
log.info("==== into mingYue api ====");
if (type == 0) {
throw new Exception("type 等于 0");
}
return mingYueUserProperties.toString();
}
// Lombok 介入的代码
@GetMapping("/mingYue")
@SneakyThrows
public String mingYue(Integer type) {
log.info("==== into mingYue api ====");
if (type == 0) {
throw new Exception("type 等于 0");
}
return mingYueUserProperties.toString();
}
启动项目验证接口数据是否正确:http://localhost:8090/mingYue
@RequiredArgsConstructor
替代 @Autowired 构造注入,多个 bean 注入时更加清晰,只会构造注入 final 注释的属性
// 原代码
@RestController
public class MingYueController {
private static final Logger log = LoggerFactory.getLogger(MingYueController.class);
@Autowired private MingYueUserProperties mingYueUserProperties;
@GetMapping("/mingYue")
public String mingYue() {
log.info("==== into mingYue api ====");
return mingYueUserProperties.toString();
}
}
// Lombok 介入的代码
@RestController
@RequiredArgsConstructor
public class MingYueController {
private static final Logger log = LoggerFactory.getLogger(MingYueController.class);
private final MingYueUserProperties mingYueUserProperties;
@GetMapping("/mingYue")
public String mingYue() {
log.info("==== into mingYue api ====");
return mingYueUserProperties.toString();
}
}
启动项目验证接口数据是否正确:http://localhost:8090/mingYue
@Cleanup
清理流对象,不用手动去关闭流
// 原代码
@SneakyThrows
public void useCleanUp() {
String inStr = "Ming Yue!";
ByteArrayInputStream in = new ByteArrayInputStream(inStr.getBytes("UTF-8"));
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] b = new byte[1024];
while (true) {
int r = in.read(b);
if (r == -1) {
break;
}
out.write(b, 0, r);
}
String outStr = out.toString("UTF-8");
System.out.println(outStr);
// 手动清理
out.close();
in.close();
}
// Lombok 介入的代码
@SneakyThrows
public void useCleanUpNew() {
String inStr = "Ming Yue!";
// 使用输入输出流自动关闭
@Cleanup ByteArrayInputStream in = new ByteArrayInputStream(inStr.getBytes("UTF-8"));
@Cleanup ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] b = new byte[1024];
while (true) {
int r = in.read(b);
if (r == -1) {
break;
}
out.write(b, 0, r);
}
String outStr = out.toString("UTF-8");
System.out.println(outStr);
}
@XxConstructor
@XxConstructor注解可以自动生成构造方法:
- @NoArgsConstructor:生成无参构造函数;
- @AllArgsConstructor:生成包含所有参数的构造函数;
@Builder
可以通过建造者模式来创建对象,建造者模式加链式调用
@Data
@ToString
@Component
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ConfigurationProperties(prefix = "mingyue")
public class MingYueUserProperties {
private Long id;
private String name;
private String sex;
public static void main(String[] args) {
MingYueUserProperties example =
MingYueUserProperties.builder().id(2L).name("Strive").sex("男").build();
System.out.println(example);
}
}
@Slf4j
Lombok 生成日志对象,直接生成日志对象 log
// 原代码
@RestController
@RequiredArgsConstructor
public class MingYueController {
private final MingYueUserProperties mingYueUserProperties;
// 手动声明日志对象
private static final Logger log = LoggerFactory.getLogger(MingYueController.class);
@GetMapping("/mingYue")
@SneakyThrows
public String mingYue(Integer type) {
log.info("==== into mingYue api ====");
if (null != type && type == 0) {
throw new Exception("type 等于 0");
}
return mingYueUserProperties.toString();
}
}
// Lombok 介入的代码
@Slf4j
@RestController
@RequiredArgsConstructor
public class MingYueController {
private final MingYueUserProperties mingYueUserProperties;
@GetMapping("/mingYue")
@SneakyThrows
public String mingYue(Integer type) {
// 直接使用日志对象
log.info("==== into mingYue api ====");
if (null != type && type == 0) {
throw new Exception("type 等于 0");
}
return mingYueUserProperties.toString();
}
}
启动项目验证接口数据是否正确:http://localhost:8090/mingYue,日志输出如下:
INFO 1356 --- [nio-8090-exec-3] c.c.m.b.l.controller.MingYueController : ==== into mingYue api ====
实现原理
去 target
目录瞅一瞅对应的 class
文件就知道啦~~~
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/78351.html