lombok注解使用小结
# lombok 注解使用小结
lombok 是在编译期时生成,可在 target 目录下看见构造器注入的内容。
# 常用注解
@Data
:注在类上,提供类的 get、set、equals、hashCode、canEqual、toString 方法@Setter
:注在属性上,提供 set 方法@Getter
:注在属性上,提供 get 方法@EqualsAndHashCode
:注在类上,提供对应的 equals 和 hashCode 方法@Log4j/@Slf4j
:注在类上,提供对应的 Logger 对象,变量名为 log
# Bean 注入
@NoArgsConstructor
/@RequiredArgsConstructor
/@AllArgsConstructor
这三个注解都是用在类上的,
- 第一个和第三个都很好理解,就是为该类产生无参的构造方法和包含所有参数的构造方法
- 第二个注解则使用类中所有带有
@NonNull
注解的或者带有final
修饰的成员变量生成对应的构造方法。成员变量都是非静态的**,另外,如果类中含有final
修饰的成员变量,是无法使用@NoArgsConstructor
注解**的 - 三个注解都可以指定生成的构造方法的访问权限,同时,第二个注解还可以用
@RequiredArgsConstructor(staticName="methodName")
的形式生成一个指定名称的静态方法,返回一个调用相应的构造方法产生的对象
# @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;
// }
// 其他方法和属性...
}
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、属性介绍
staticName 属性:
默认情况下,Lombok生成的构造方法是公共的(public),但是通过设置
staticName
属性,你可以将生成的构造方法设置为私有(private)。它还允许你自定义静态工厂方法的名称,并且该方法接受一个
final
和@NonNull
注解的参数,返回类型为当前类的对象。
access 属性:
这个属性用于设置生成的构造方法的访问修饰符。如果你设置了
staticName
属性,那么这个属性也会影响到生成的静态工厂方法的访问修饰符。它支持以下选项:
PUBLIC
:公共的MODULE
:Java 9 引入的新特性,表示模块可见性PROTECTED
:受保护的PACKAGE
:包私有的PRIVATE
:私有的NONE
:停用注解功能,不生成构造方法也不生成静态方法
onConstructor 属性:
这个属性允许你为生成的构造方法添加额外的注解。你可以列出需要添加的注解列表。(放在生成的构造方法上)
- 在 JDK 7 之前,写法是
onConstructor = @_({@注解1, @注解2})
- 在 JDK 8 及以后,写法是
onConstructor = {@注解1, @注解2}
- 在 JDK 7 之前,写法是
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注入失败");
}
}
}
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
,以生成不同类型的构造方法。