5. Lombok


5.1 Lombok 介绍

● Lombok 作用

  1. 简化 JavaBean 开发,可以使用 Lombok 的注解让代码更加简洁

  2. Java 项目中,很多没有技术含量又必须存在的代码

    ① POJO 的 getter/setter/toString
    ② 异常处理
    ③ I/O 流的关闭操作等等

  3. 这些代码既没有技术含量,又影响着代码的美观

  4. Lombok 应运而生

● SpringBoot 和 IDEA 官方支持

  1. IDEA 2020 已经内置了 Lombok 插件
  2. SpringBoot 2.1.x 之后的版本也在 Starter 中内置了 Lombok 依赖

5.2 Lombok 常用注解

  • @Data 注解在类上,提供类所有属性的 getter 和 setter 方法,此外还提供了 equals、canEqual、hashCode、toString 方法
  • @Setter 注解在属性上,为属性提供 setter 方法
  • @Getter 注解在属性上,为属性提供 getter 方法
  • @Log4j 注解在类上,为类提供一个 属性名为log 的 log4j 日志对象
  • @NoArgsConstructor 注解在类上,为类提供一个无参构造器
  • @AllArgsConstructor 注解在类上,为类提供一个全构造器
  • @Cleanup 可以关闭流
  • @Builder 被注解的类加个构造者模式
  • @Synchronized 加个同步锁
  • @SneakyThrows 等同于 try/catch 捕获异常
  • @NonNull 如果参数加这个注解,参数为 null 会抛出空指针异常
  • @Value 注解和 @Data 类似,区别在于它会把所有的成员变量默认定义为 private final 修饰,并且不会生成 setter 方法

5.3 Lombok 应用实例

5.3.1 需求说明

  • 使用 Lombok 简化 Furn.java 代码 , 让代码简洁高效

5.3.2 代码实现

  1. 在 pom.xml 引入 lombok
<!-- 引 入 lombok, 版本在 spring-boot-dependencies-2.5.3.pom 指定了,把光标放在 lombok ctrl+b 可以看到-->
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
</dependency>

---------------------看对应的版本-----------------

在这里插入图片描述

  1. 修改 Furn.java 使用 Lombok 注解简化代码,提示可以通过 idea 自带的反编译功能,看 Furn.class 的源码,就可以看到生成的完整代码
package com.xjs.springboot.bean;

import lombok.*;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @Author: 谢家升
 * @Version: 1.0
 */
@Component
@ConfigurationProperties(prefix = "furn01")
//@ToString //在编译时,生成 toString方法, 默认情况下 会生成一个无参构造器
/**
 * 解读:@Data
 * 1. Equivalent to {@code @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode}.
 * 2. @Data 等价使用了 如下注解: @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode
 * 3. @RequiredArgsConstructor : 单独的说一下
 */
//@Data
/**解读:@NoArgsConstructor
 * 1. 在编译时,会生成无参构造器,前面也说了,默认情况下 也会生成一个无参构造器
 * 2. 当我们有其他构造器生成时,如果你希望仍然有无参构造器,就需要使用 @NoArgsConstructor注解 来指定一下
 *    否则就会覆盖无参构造器,从而导致代码错误
 */
@NoArgsConstructor
/**
 * 解读:@AllArgsConstructor
 * 1. 在编译时,会生成全参构造器,注意 这里会覆盖 默认的 无参构造器
 * 2. 如果我们需要无参构造器 可以有以下两种方式:
 *    (1) 手动生成一个 无参构造器
 *    (2) 标识 @NoArgsConstructor注解 也会生成一个无参构造器
 */
@AllArgsConstructor
public class Furn {

    private Integer id;
    private String name;
    private Double price;

}

@RequiredArgsConstructor 说明:

  • 在我们写controller或者Service层的时候,需要注入很多的mapper接口或者另外的service接口
  • 这时候就会写很多的 @Autowired 注解,代码看起来很乱
  • Lombok 提供了一个注解
    • @RequiredArgsConstructor(onConstructor =@_(@Autowired))
    • 写在类上可以代替@Autowired注解
    • 需要注意的是在注入时需要用final定义,或者使用@notnull注解

在这里插入图片描述


------------反编译, 看源码-----------

在这里插入图片描述

  1. 启动 MainApp.java ,完成测试

在这里插入图片描述


  1. 在 idea 安装 lombok 插件
  • 不装插件也可以用基本的注解,比如 @Data @Getter
  • 但是不能使用其扩展功能,比如日志输出…
  • 所以我们还是安装一下,也比较简单

在这里插入图片描述

  1. 演示使用 Lombok 支持日志输出 (建议使用 slf4j ),修改 D:\xjs_springboot\quickstart\src\main\java\com\xjs\HiController.java
package com.xjs;

import com.xjs.springboot.bean.Furn;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;

/**
 * @Author: 谢家升
 * @Version: 1.0
 */
@Slf4j
@Controller
public class HiController {

    //需求: website属性值 application.properties 的 k-v 来获取
    @Value("${my.website}")
    private String website;

    //装配到 HiController
    @Resource
    private Furn furn;

    @RequestMapping("/hi")
    @ResponseBody
    public String hi() {
        System.out.println("website= " + website);
        return "hi~, SpringBoot";
    }

    @RequestMapping("/furn")
    @ResponseBody
    public Furn furn() {
        //System.out.println("furn= " + furn);
        //使用Slf4j日志输出
        //普通方式
        log.info("furn-" + furn);
        //占位符方式输出
        log.info("furn={} myFurn={}", furn, furn);
        return furn;
    }

}

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

要学就学灰太狼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值