01.Lombok-Getter、Setter篇
连载文章,大家多多支持。
Lombok如何在idea中安装和使用这里就不多介绍了。
重新学习Lombok是因为,我之前在项目中,也会使用lombok,但是只会使用@Data注解。
对于Lombok高级的知识点儿却一点儿也不知道。
如果你的情况和我一样,欢迎大家订阅Lombok专题。
Lombok是一个后端Java提效神器。
SpringBoot整合Lombok
- 我们可以在通过在线站点start.spring.io/ 创建我们的SpringBoot项目。
- 其实我们在idea中创建springboot项目也是通过这个网站生成压缩包文件然后放到idea编辑器中解压的。
- 在pom.xml 中引入lombok的依赖
- 技巧:一般我都会通过mavne官方仓库找到lombok的依赖 mvnrepository.com/
- 找到你们公司使用的就可以。一般来说这种lombok基础的东西在公司项目的脚手架里都有。
- 至于公司允不允许使用lombok还是需要看公司的规定。如果不能使用lombok就只能利用idea快捷键生成setter、getter、构造、toString...等方法了。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
<scope>provided</scope>
</dependency>
完整的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lzh</groupId>
<artifactId>1024shop-manager</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>1024shop-manager</name>
<description>后端提效练手</description>
<properties>
<java.version>8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
</build>
<!-- 代码库 -->
</project>
来看一个pojo类 User.java
package com.lzh.model;
import java.util.Date;
/**
* @Author:kaiyang.cui
* @Package:com.lzh.model
* @Project:1024shop-manager
* @name:User
* @Date:2023/3/29 下午4:01
* @Filename:User
* @Description:User实体类
* @Version:1.0
*/
public class User {
private Integer id;
private String username;
private String password;
private String email;
private String phone;
private Integer deleted;
private Date ctreateTime;
private Date updatetime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Integer getDeleted() {
return deleted;
}
public void setDeleted(Integer deleted) {
this.deleted = deleted;
}
public Date getCtreateTime() {
return ctreateTime;
}
public void setCtreateTime(Date ctreateTime) {
this.ctreateTime = ctreateTime;
}
public Date getUpdatetime() {
return updatetime;
}
public void setUpdatetime(Date updatetime) {
this.updatetime = updatetime;
}
}
我们使用命令编译Java项目,会在项目中生成字节码文件
mvn compile
我们可以很快找到我们的字节码文件,其实就是我们编写User.java编译成字节码文件的User.class:
使用Lombok @Setter注解
package com.lzh.model;
import lombok.Setter;
import java.util.Date;
/**
* @Author:kaiyang.cui
* @Package:com.lzh.model
* @Project:1024shop-manager
* @name:User
* @Date:2023/3/29 下午4:01
* @Filename:User
* @Description:User实体类
* @Version:1.0
*/
public class User {
@Setter
private Integer id;
private String username;
private String password;
private String email;
private String phone;
private Integer deleted;
private Date ctreateTime;
private Date updatetime;
}
我们再次执行编译项目
mvn compile
从上图可以清晰的看到,我们的User.class 字节码文件只生成了Setter方法, 还有一个无参的构造方法 【这个点儿很多人不知道】!!!
使用Lombok @Getter注解
同理我们id属性上使用@Getter注解,我们在User.class 只能看到id属性的getter方法。
package com.lzh.model;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
/**
* @Author:kaiyang.cui
* @Package:com.lzh.model
* @Project:1024shop-manager
* @name:User
* @Date:2023/3/29 下午4:01
* @Filename:User
* @Description:User实体类
* @Version:1.0
*/
public class User {
@Getter
private Integer id;
private String username;
private String password;
private String email;
private String phone;
private Integer deleted;
private Date ctreateTime;
private Date updatetime;
}
同时使用@Setter和@Getter注解
同时使用@Setter和@Getter注解可以放在
- 属性
- 类上
如果放在属性上,只生成对应属性的Setter、Getter方法;如果放在类上可以使 整个User实体类的所有属性都具有Setter、Getter方法。
放在属性上的写法
package com.lzh.model;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
/**
* @Author:kaiyang.cui
* @Package:com.lzh.model
* @Project:1024shop-manager
* @name:User
* @Date:2023/3/29 下午4:01
* @Filename:User
* @Description:User实体类
* @Version:1.0
*/
public class User {
@Setter
@Getter
private Integer id;
private String username;
private String password;
private String email;
private String phone;
private Integer deleted;
private Date ctreateTime;
private Date updatetime;
}
放在类上的写法
package com.lzh.model;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
/**
* @Author:kaiyang.cui
* @Package:com.lzh.model
* @Project:1024shop-manager
* @name:User
* @Date:2023/3/29 下午4:01
* @Filename:User
* @Description:User实体类
* @Version:1.0
*/
@Setter
@Getter
public class User {
private Integer id;
private String username;
private String password;
private String email;
private String phone;
private Integer deleted;
private Date ctreateTime;
private Date updatetime;
}
使用Lobbok修改访问权限控制符的权限
不知道大家有没有疑惑,为什么在成员属性id上加@Setter方法,就可以生成Getter方法了呢,我也疑惑,但是这个不是我们今天要讨论的话题。
我们写一个方法的时候应关注
- 访问权限修饰符
- 方法的返回值
- 方法名
- 方法的参数列表
- 方法的业务逻辑
我们通过翻阅@Setter注解的源码,可以发现在生成Setter方法的时候,默认的权限访问控制符是public的。
我们现在的有一个需求,生成的Setter方法,必须是private修饰的 我们可以这样做:
package com.lzh.model;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
/**
* @Author:kaiyang.cui
* @Package:com.lzh.model
* @Project:1024shop-manager
* @name:User
* @Date:2023/3/29 下午4:01
* @Filename:User
* @Description:User实体类
* @Version:1.0
*/
public class User {
@Setter(AccessLevel.PRIVATE)
private Integer id;
private String username;
private String password;
private String email;
private String phone;
private Integer deleted;
private Date ctreateTime;
private Date updatetime;
}
编译后我们可以看到权限访问修饰符的确变为private了。
使用Lombok定制需要生成的Setter、Getter的属性
这句话的意思是,我们想在User实体类上只有id属性不生成Setter、Getter 但是除了id属性以外的User类中的所有属性都必须生成Setter、Getter 方法。
可以这样写:
package com.lzh.model;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
/**
* @Author:kaiyang.cui
* @Package:com.lzh.model
* @Project:1024shop-manager
* @name:User
* @Date:2023/3/29 下午4:01
* @Filename:User
* @Description:User实体类
* @Version:1.0
*/
@Setter
@Getter
public class User {
@Setter(AccessLevel.NONE)
@Getter(AccessLevel.NONE)
private Integer id;
private String username;
private String password;
private String email;
private String phone;
private Integer deleted;
private Date ctreateTime;
private Date updatetime;
}
如果一个User中有一个成员属性是final修饰的,只会生成getter方法
private final String name;
User类中有静态变量是不会帮我们生成Setter、Getter方法的
希望这篇文章对你有帮助,我们下期再见。