1.使用lombok的原因
当一个实体类里的成员属性太多时(特别是开发大型项目时),手动生成get、set方法会产生极大的不方面,使用lombok可以是我们自动的去生成这些方法,极大的提升开发效率。另外我们在自己写小demo时,可能会改变一些实体类的成员属性,紧接着我们又要修对应set、get中的参数会显得非常麻烦。
lombok快速开发,通过一些注解,获得一些方法(get、set、toString等)
2.快速开始
1.添加依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
2.注解的使用
- @Date 用在实体类上:自动为该类的成员变量加上get、set、toString、hascode、equals方法
下面进行图文展示:
在java中进行编写:
@Data
public class Student {
private Integer id;
private String name;
private int age;
}
通过原理可知:在我们编码过程中,我们只用该注解就应该已经把对应的大多数方法写进文件了,我们可以通过target目录查看:
我们可以通过target查找到.class文件
public class User {
private Long id;
private String name;
private Integer age;
private String email;
public String toString() {
return "User{id=" + this.id + ", name='" + this.name + '\'' + ", age=" + this.age + ", email='" + this.email + '\'' + '}';
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return this.age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
public User(Long id, String name, Integer age, String email) {
this.id = id;
this.name = name;
this.age = age;
this.email = email;
}
public User() {
}
}
可知java文件编码成.class文件后已经把我们相关的代码自动加入到代码中了
3.lombok原理
- java文件先通过jvm生成语法树,再通过jvm将java编译成.class文件。
- 我们进入@Data源码中进行查看:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
public @interface Data {
String staticConstructor() default “”;
}
我们可以知道source表示编译源码阶段生效:
原理:在java文件生成语法树后,@Data开始生效,对语法树进行对应的修改,然后语法树在通过jvm编译成字节码文件。
4.更多的注解
@Data 从上面可以知道该注解是加上所有的方法(除了构造方法,系统默认·有无参构造)
@Setter 为所有属性加上set方法
@Getter 为所有属性加上get方法
@ToString
@EqulasAndHash
以上4个都不怎么常用,只需要用@Data就行了
@AllArgsConstructor 添加有参构造
@NoArgsConstructor 添加无参构造
以上两个通常配套使用(只能生成全参和无参,若要生成个别参数的,就只能进行手动添加了)
@Accesssors 重要 作用开启set方法的链式法则:参数chain默认true开启链式法则,改为false可以关闭
User user=user.setAge(12).setName("haha").setId(3);
即set返回的不是void而是实体对象了
@Slf4j 自动在类的成员变量加上成员
private static final Logger log = LoggerFactory.getLogger(Student.class);
这样我们就可以在该类中直接只用log的相关方法而不需要去定义了
5.总结
以上所有的注解都上加在类上的
以上所有方法都是在编译时期生效的
当然执行lombok不要忘了先在idea插件库中下载lombok插件才行,直接在idea的plugin市场搜索lombok即可