Kiroの编程指南 Kiroの编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • Java8 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • Netty
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 从零带你写netty
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • Java8 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • Netty
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 从零带你写netty
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
  • 开发工具篇

    • idea设置

      • 配置篇
      • 快捷键篇
      • debug篇
      • 插件篇
    • 玩转Git

      • 基础知识梳理
      • Git配置相关操作
      • git修改已提交人的用户名和邮箱
      • git提交规范
      • 常见问题
    • Maven相关

      • Maven简介
      • Maven常用命令
      • 依赖管理
      • Maven生命周期与插件
      • Maven项目管理工具
    • vscode设置

      • 配置篇
    • nvm使用小结
    • Apifox使用小结
    • JMeter使用小记
  • 工具库篇

    • lombok工具库

      • lombok注解使用小结
        • 常用注解
        • Bean 注入
          • @AllArgsConstructor - 全参构造方法
          • @RequiredArgsConstructor - 带参构造
          • @NoArgsConstructor - 无参构造
        • 异常相关注解
        • 参考文献
      • Builder用法解析
    • EasyExcel小记

      • 文件导入
      • 文件导出
    • 极光推送学习
    • OkHttp学习
    • BigDecimal类详解
    • PdfBox学习
    • 定时任务相关
  • 开发技巧篇

    • 常见数据校验注解
    • 字符串拼接的5种方式
    • 遍历集合的N种方式
    • 集合使用注意事项总结
    • MP使用小记
    • Stream流技巧总结
    • 字符串处理最佳实践
    • 自制代码生成器
    • 幂等性问题分析
    • SQL语句优化
    • 时间字段处理小记
    • Curl用法解析
    • 列表分页的两种实现方案
    • HashMap根据value获取key
    • Map的7种遍历方式
    • 唯一索引和逻辑删除冲突解决方法
    • 正则表达式
    • 二维码扫码登录学习
    • 脱敏最佳实践
    • 日志记录相关
  • 工具类系列

    • 手写一个文件阅读器
    • 手写一个运行耗时计算器
    • 自定义实现Java Bean属性中列表元素格式校验注解及其实现
    • 父子工程项目搭建
  • 随笔

    • HttpServletRequest知识小结
    • Spring MVC 项目构建流程
    • 虚拟机固定ip地址
    • 项目部署
    • 深入理解数组
    • IIS使用小记
    • From的两种类型解析
    • 开发疑惑
    • 开发小记
    • bug解决
  • 开发日常
  • 工具库篇
  • lombok工具库
Kiro
2023-09-13
目录

lombok注解使用小结

# lombok 注解使用小结

lombok 是在编译期时生成,可在 target 目录下看见构造器注入的内容。

# 常用注解

  1. @Data:注在类上,提供类的 get、set、equals、hashCode、canEqual、toString 方法
  2. @Setter:注在属性上,提供 set 方法
  3. @Getter:注在属性上,提供 get 方法
  4. @EqualsAndHashCode:注在类上,提供对应的 equals 和 hashCode 方法
  5. @Log4j/@Slf4j:注在类上,提供对应的 Logger 对象,变量名为 log

# Bean 注入

# @AllArgsConstructor - 全参构造方法

1、注解介绍

用于自动生成一个包含所有参数的构造方法。

通常,如果你的类有多个属性,你需要手动编写一个构造方法,接受所有这些属性作为参数,然后将它们赋值给对象的属性。而 @AllArgsConstructor 可以自动帮你生成这个构造方法,大大简化了代码编写。

2、特点

  • 自动生成一个包含所有属性的构造方法。
  • 自动生成的构造方法默认是公共的(public),但你可以通过其他 Lombok 注解来修改它的可见性。

3、属性介绍

@AllArgsConstructor 注解没有直接定义的属性,但可以与其他 Lombok 注解结合使用来修改生成的构造方法的行为。

以下是一些常见的属性注解:

  • AccessLevel:通过设置这个属性,你可以修改生成的构造方法的访问级别。例如,@AllArgsConstructor(access = AccessLevel.PRIVATE) 将生成一个私有的构造方法。
  • onConstructor:这个属性允许你为生成的构造方法添加额外的注解。你可以列出需要添加的注解列表。例如,@AllArgsConstructor(onConstructor = @__({@Autowired})) 可以在生成的构造方法上添加 Spring 的 @Autowired 注解。

4、代码示例

@AllArgsConstructor
public class Person {
    private String firstName;
    private String lastName;
    private int age;
    
    // 自动生成的构造方法,接受所有属性作为参数
    // public Person(String firstName, String lastName, int age) {
    //     this.firstName = firstName;
    //     this.lastName = lastName;
    //     this.age = age;
    // }
    
    // 其他方法和属性...
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# @RequiredArgsConstructor - 带参构造

需求场景

当我们使用 @Autowired 进行 Bean 注入的时候,IDEA 会提示警告,不建议使用此方式进行注入。Spring 官方更推荐使用构造方法进行注入。

1、注解介绍

作用于类,用于生成包含 final 和 @NonNull (opens new window) 注解的成员变量的构造方法。

2、特点

  • 该注解作用于类上
  • 标记为 final 的对象,会自动进行注入
  • 使用 lombok 的 @NonNull 注解标记的对象,会自动进行注入

3、属性介绍

  1. staticName 属性:

    • 默认情况下,Lombok生成的构造方法是公共的(public),但是通过设置 staticName 属性,你可以将生成的构造方法设置为私有(private)。

    • 它还允许你自定义静态工厂方法的名称,并且该方法接受一个 final 和 @NonNull 注解的参数,返回类型为当前类的对象。

  2. access 属性:

    这个属性用于设置生成的构造方法的访问修饰符。如果你设置了 staticName 属性,那么这个属性也会影响到生成的静态工厂方法的访问修饰符。

    它支持以下选项:

    • PUBLIC:公共的
    • MODULE:Java 9 引入的新特性,表示模块可见性
    • PROTECTED:受保护的
    • PACKAGE:包私有的
    • PRIVATE:私有的
    • NONE:停用注解功能,不生成构造方法也不生成静态方法
  3. onConstructor 属性:

    这个属性允许你为生成的构造方法添加额外的注解。你可以列出需要添加的注解列表。(放在生成的构造方法上)

    • 在 JDK 7 之前,写法是 onConstructor = @_({@注解1, @注解2})
    • 在 JDK 8 及以后,写法是 onConstructor = {@注解1, @注解2}

4、代码示例

@Component
// 使用lombok的@RequiredArgsConstructor注解进行注入
@RequiredArgsConstructor
public class ZTestController implements CommandLineRunner {
	
	// 标记为final的,会自动进行注入
    private final AliaPay aliaPay;
	
	// 使用lombok的@NonNull注解标记的,会自动进行注入
    @NonNull
    private JingDongPay jingDongPay;
	
	// 未标记final或@NonNull,不会进行注入
    private WeixinPay weixinPay;

    @Override
    public void run(String... args) throws Exception {

        aliaPay.pay();

        jingDongPay.pay();

        if (weixinPay == null) {
            System.out.println("WeixinPay注入失败");
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# @NoArgsConstructor - 无参构造

注解介绍

顾名思义,@NoArgsConstructor 注解是针对无参数的构造函数,它会生成一个无参数的构造方法。

通常,当你的类没有明确定义构造方法时,编译器会自动创建一个默认的无参数构造方法。但是,如果你在类中定义了任何构造方法(包括有参构造方法),编译器将不再自动生成默认的无参数构造方法。这时,你可以使用 @NoArgsConstructor 注解来补充生成一个无参数构造方法。

主要特点:

  • 自动生成一个无参数的构造方法。
  • 可以与其他 Lombok 注解一起使用,如 @AllArgsConstructor 和 @RequiredArgsConstructor,以生成不同类型的构造方法。

# 异常相关注解

@SneakyThrows:

  • 用于在方法声明中使用。它的作用是告诉编译器,在方法中抛出受检异常时,不需要显式地在方法签名中声明或捕获该异常。
  • 将被注解的方法中的受检查异常(checked exception)转换为不受检查异常(unchecked exception)
  • 编译器中相当于是被 try catch 了。
  • 只会抛出一个异常。
  • 可使得代码更加简洁。
  • 在使用之前,请确保已经熟悉并理解所使用的注解的作用和影响。

示例 1: 使用 @SneakyThrows 注解抛出异常

public class SneakyThrowsExample {
    @SneakyThrows
    public void doSomething() {
        throw new Exception("An exception occurred.");
    }

    public static void main(String[] args) {
        SneakyThrowsExample example = new SneakyThrowsExample();
        example.doSomething();
    }
}
1
2
3
4
5
6
7
8
9
10
11

示例 2: @SneakyThrows 注解与方法签名中的异常声明结合使用

public class SneakyThrowsExample {
    @SneakyThrows(InterruptedException.class)
    public void doSomething() {
        Thread.sleep(1000);
    }

    public static void main(String[] args) {
        SneakyThrowsExample example = new SneakyThrowsExample();
        example.doSomething();
    }
}
1
2
3
4
5
6
7
8
9
10
11

示例 3: 在 lambda 表达式中使用 @SneakyThrows 注解

public class SneakyThrowsExample {
    public static void main(String[] args) {
        Runnable runnable = () -> {
            @SneakyThrows
            String message = getMessage();
            System.out.println(message);
        };

        Thread thread = new Thread(runnable);
        thread.start();
    }

    public static String getMessage() throws InterruptedException {
        Thread.sleep(1000);
        return "Hello, world!";
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

使用 @SneakyThrows 注解后同时遇到空指针异常和不合法参数异常的情况:

public class ExceptionExample {
    @SneakyThrows
    public static void main(String[] args) {
        String str = null;
        int length = str.length(); // NullPointerException

        int[] arr = new int[5];
        int value = arr[10]; // ArrayIndexOutOfBoundsException
    }
}

// 指定了异常也不会抛出两个异常
// @SneakyThrows({NullPointerException.class, ArrayIndexOutOfBoundsException.class})
1
2
3
4
5
6
7
8
9
10
11
12
13

控制台输出:

Exception in thread "main" java.lang.NullPointerException
	at com.chenmeng.project.controller.ExceptionExample.main(ExceptionExample.java:9)

进程已结束,退出代码1
1
2
3
4

结果分析:

  1. 使用 @SneakyThrows 注解后,在方法体中同时遇到空指针异常(NullPointerException)和不合法参数异常(ArrayIndexOutOfBoundsException)时,控制台只显示了空指针异常的信息,而不会显示不合法参数异常的信息。
  2. 这是因为 @SneakyThrows 注解会将异常转换为通用的 java.lang.Exception 类型,以通过编译。但是,由于只能抛出单个异常,因此只有第一个异常会被捕获和抛出,而后续的异常会被忽略。
  3. 即使指定了两个异常也只会抛出一个异常。

可阅读以下两篇文章:

  • @SneakyThrows注解 (opens new window)
  • @SneakyThrows注解的作用 (opens new window)

# 参考文献

  • lombok常用注解大全_z|x|y的博客-CSDN博客 (opens new window)
  • SpringBoot 使用lombok的@RequiredArgsConstructor注解进行Bean注入_@requiredargsconstructor 注入为null_fengyehongWorld的博客-CSDN博客 (opens new window)
  • lombok 基础注解之 @RequiredArgsConstructor_lombok requiredargsconstructor_笑看烟雨红尘的博客-CSDN博客 (opens new window)
  • @Data 使用与介绍_foxscallion的博客-CSDN博客 (opens new window)
上次更新: 2025/4/29 05:15:44
JMeter使用小记
Builder用法解析

← JMeter使用小记 Builder用法解析→

Theme by Vdoing | Copyright © 2022-2025 Kiro | 豫ICP备2021022101号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式