Lombok库

文章目录

Lombok

1.介绍

Lombok 是一个 Java 库,它可以通过注解的方式减少 Java 代码中的样板代码。Lombok 自动为你生成构造函数、getter、setter、equals、hashCode、toString 方法等,从而避免了手动编写这些重复性的代码。这不仅减少了出错的机会,还让代码看起来更加简洁。

Lombok是一个编译阶段的库,能够帮我们自动补充代码,在Java程序运行阶段并不起作用。

2.主要注解

@Data:

  • 等价于 @ToString, @EqualsAndHashCode, @Getter,@Setter,@RequiredArgsConstructor.
  • 用于生成:必要参数的构造方法、getter、setter、toString、equals 和 hashcode 方法

@Getter / @Setter:

  • 分别用于生成所有的 getter 和 setter 方法
  • 可以作用于整个类,也可以作用于特定的字段

@NoArgsConstructor:

  • 生成一个无参构造方法

@AllArgsConstructor:

  • 生成一个包含所有实例变量的构造器

@RequiredArgsConstructor:

  • 生成包含所有被 final 修饰符修饰的实例变量的构造方法
  • 如果没有final的实例变量,则自动生成无参数构造方法

@ToString / @EqualsAndHashCode:

  • 用于生成 toString 和 equals/hashCode 方法
  • 这两个注解都有exclude属性,通过这个属性可以定制toString、hashCode、equals方法

2.1如何使用 Lombok

2.1.1添加依赖

在 Maven 的 pom.xml 文件中添加 Lombok 依赖:

java 复制代码
<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.36</version>
</dependency>

2.1.2 使用Lombok注解

在 Java 类中使用 Lombok 提供的注解

java 复制代码
import lombok.Data;

@Data
public class User {
    private String name;
}
java 复制代码
public class Test {
    public static void main(String[] args) {
        User user = new User();
        user.setName("jackson");
        System.out.println(user.getName());
        System.out.println(user.toString());
        System.out.println(user.hashCode());
        User user2 = new User();
        user2.setName("jackson");
        System.out.println(user.equals(user2));
    }
}

执行结果如下:

注:Lombok只能帮助我们生成无参数构造方法和全参数构造方法,其他定制参数的构造方法无法生成。

2.1.3Lombok的其他常用注解

@Value

该注解会给所有属性添加final,给所有属性提供getter方法,自动生成toString、hashCode、equals

通过这个注解可以创建不可变对象。

java 复制代码
@Value
public class Customer {
    Long id;
    String name;
    String password;
}

Test

java 复制代码
public class CustomerTest {
    public static void main(String[] args) {
        Customer c1 = new Customer(1L, "jackson", "123");
        System.out.println(c1);
        System.out.println(c1.getId());
        System.out.println(c1.getName());
        System.out.println(c1.getPassword());
        System.out.println(c1.hashCode());
        Customer c2 = new Customer(1L, "jackson", "123");
        System.out.println(c1.equals(c2));
    }
}

执行结果如下:

@Builder
GoF23种设计模式之一:建造模式

建造模式(Builder Pattern)属于创建型设计模式。

用于解决对象创建时参数过多的问题。

它通过将对象的构造过程与其表示分离,使得构造过程可以逐步完成,而不是一次性提供所有参数。

建造模式的主要目的是让对象的创建过程更加清晰、灵活和可控。

简而言之,建造模式用于:

  1. 简化构造过程:通过逐步构造对象,避免构造函数参数过多。
  2. 提高可读性和可维护性:让构造过程更加清晰和有序。
  3. 增强灵活性:允许按需配置对象的不同部分。
    这样可以更方便地创建复杂对象,并且使得代码更加易于理解和维护。

建造模式的代码如下

java 复制代码
// 建造模式
public class Person {
    // 属性
    private final String name;
    private final int age;
    private final String email;

    // 私有的全参数构造方法
    private Person(String name, int age, String email) {
        this.name = name;
        this.age = age;
        this.email = email;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getEmail() {
        return email;
    }

    public static PersonBuilder builder() {
        return new PersonBuilder();
    }

    // 静态内部类
    public static class PersonBuilder {
        private String name;
        private int age;
        private String email;

        public PersonBuilder name(String name) {
            this.name = name;
            return this;
        }

        public PersonBuilder age(int age) {
            this.age = age;
            return this;
        }

        public PersonBuilder email(String email) {
            this.email = email;
            return this;
        }

        // 建造对象的核心方法
        public Person build() {
            return new Person(name, age, email);
        }
    }

    @Override
    public String toString() {
        return "Person{" + "name='" + name + '\'' + ", age=" + age + ", email='" + email + '\'' + '}';
    }

    public static void main(String[] args) {
        Person person = Person.builder()
                .name("jackson")
                .age(20)
                .email("[email protected]")
                .build();
        System.out.println(person);
    }
}

执行结果如下:

使用@Builder注解自动生成建造模式的代码
java 复制代码
@Data
@Builder
// 建造模式
public class Person {
    // 属性
    private String name;
    private int age;
    private String email;

    public static void main(String[] args) {
        Person person = Person.builder()
                .name("jackson")
                .age(20)
                .email("[email protected]")
                .build();
        System.out.println(person);
    }
}
@Singular

@Singular注解是辅助@Builder注解的。

当被建造的对象的属性是一个集合,这个集合属性使用@Singular注解进行标注的话,可以连续调用集合属性对应的方法完成多个元素的添加。

如果没有这个注解,则无法连续调用方法完成多个元素的添加。代码如下:

java 复制代码
@Data
@Builder
// 建造模式
public class Person {
    // 属性
    private final String name;
    private final int age;
    private final String email;
    // Singular翻译为:单数。表示一条一条添加
    @Singular("addPhone")
    private final List<String> phones;

    public static void main(String[] args) {
        Person person = Person.builder()
                .name("jackson")
                .age(20)
                .email("[email protected]")
                .addPhone("15222020214")
                .addPhone("14875421424")
                .addPhone("16855241424")
                .build();
        System.out.println(person);
    }
}

执行结果如下:

@Slf4j

Lombok 支持多种日志框架的注解,可以根据你使用的日志框架选择合适的注解。以下是 Lombok 提供的部分日志注解及其对应的日志框架:

  1. @Log4j:
    自动生成一个 org.apache.log4j.Logger 对象。
    适用于 Apache Log4j 1.x 版本。
  2. @Slf4j:
    自动生成一个 org.slf4j.Logger 对象。
    适用于 SLF4J(Simple Logging Facade for Java),这是一种日志门面,可以与多种实际的日志框架(如 Logback、Log4j 等)集成。
  3. @Log4j2:
    自动生成一个 org.apache.logging.log4j.Logger 对象。
    适用于 Apache Log4j 2.x 版本。
使用

假设我们有一个类 ExampleClass,并且我们想要使用 SLF4J 作为日志框架,我们可以这样使用 @Slf4j 注解:

java 复制代码
@Slf4j
public class UserService {
    public void login(){
        log.info("登录验证...");
    }
    // 测试
    public static void main(String[] args) {
        UserService userService = new UserService();
        userService.login();
    }
}

在这个例子中,log 是一个静态成员变量,表示一个 org.slf4j.Logger 对象。Lombok 自动生成了这个日志对象,并且你可以直接使用它来进行日志记录。

选择合适的注解

选择哪个注解取决于你使用的日志框架。例如:

● 如果你使用的是 SLF4J,可以选择 @Slf4j。

● 如果你使用的是 Log4j 1.x,可以选择 @Log4j。

● 如果你使用的是 Log4j 2.x,可以选择 @Log4j2。

相关推荐
冼紫菜26 分钟前
【Spring Boot 多模块项目】@MapperScan失效、MapperScannerConfigurer 报错终极解决方案
java·开发语言·mybatis
还听珊瑚海吗1 小时前
基于SpringBoot的抽奖系统测试报告
java·spring boot·后端
练习本1 小时前
Android系统架构模式分析
android·java·架构·系统架构
心灵宝贝3 小时前
IDEA 安装 SpotBugs 插件超简单教程
java·macos·intellij-idea
幼稚诠释青春3 小时前
Java学习笔记(对象)
java·开发语言
小羊学伽瓦4 小时前
【Java基础】——JVM
java·jvm
老任与码4 小时前
Spring AI(2)—— 发送消息的API
java·人工智能·spring ai
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧4 小时前
MyBatis快速入门——实操
java·spring boot·spring·intellij-idea·mybatis·intellij idea
csdn_freak_dd4 小时前
查看单元测试覆盖率
java·单元测试
爱吃烤鸡翅的酸菜鱼4 小时前
【SpringMVC】详解cookie,session及实战
java·http·java-ee·intellij-idea