我们在日常的开发、维护过程中,通常会遇到大量的javabean,通过IED自动去生成getter、setter、equals、hashcode、toString等相关方法,一旦修改或新增还要重新设置,这样没有意义、有重复的工作实际上没有太多意义且java文件含有大量冗余的代码,这时我们可以通过lombok相关注解的方式来去解决这些问题
Lombok简介可以通过注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具类官方地址:https://projectlombok.org/
github地址:https://github.com/rzwitserloot/lombok
eclipse安装
下载lombok.jar 双击
点击 Specify location 选择你安装的eclipse.exe ,点击Install/Update即可
或者
打开eclipse.ini 新增-javaagent:E:\eclise_oxygen\eclipse\lombok.jar
指定lombok.jar路径即可
重启eclipse生效
Lombok使用
maven pom.xml新增
org.projectlombok
lombok
1.16.20
常用注解
@Getter/@Setter
作用在类上或属性上,放在类上,对所有的非静态(non-static)属性生成Getter/Setter方法,放在属性上,会对该属性生成Getter/Setter方法@Getter
@Setter
public class T implements Serializable{
private String userName;
private String password;
}
等同于public class T implements Serializable{
private String userName;
private String password;
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;
}
}
@ToString
作用在类上,生成toString方法,默认情况下,会输出类名、所有属性,属性会按照顺序输出,以逗号分割@ToString
public class T implements Serializable{
private String userName;
private String password;
}
等同于public class T implements Serializable{
private String userName;
private String password;
@Override
public String toString() {
return "T (userName=" + userName + ", password=" + password + ")";
}
}
@EqualsAndHashCode
会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,也可指定具体使用哪些属性@EqualsAndHashCode
public class T implements Serializable{
private String userName;
private String password;
}
等同于public class T implements Serializable{
private String userName;
private String password;
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
T other = (T) obj;
if (password == null) {
if (other.password != null)
return false;
} else if (!password.equals(other.password))
return false;
if (userName == null) {
if (other.userName != null)
return false;
} else if (!userName.equals(other.userName))
return false;
return true;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((password == null) ? 0 : password.hashCode());
result = prime * result + ((userName == null) ? 0 : userName.hashCode());
return result;
}
}
@NoArgsConstructor @AllArgsConstructor
无参构造器、全参构造器
@RequiredArgsConstructor
部分参数构造器, 该注解会生成一个包含常量(final),和标识了@NotNull的变量 的构造方法
该注解有3个参数可设置onConstructoronConstructor=@__({@AnnotationsHere})
比如@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class TService{
private TDao tDao;
}
等同于@Service
public class TService{
@Autowired
private TDao tDao;
}access 构造函数访问修饰符,默认public
staticName
如果设置了它,将添加一个静态构造方法名字是设置的字符串的名字,访问修饰符为公有的@RequiredArgsConstructor(staticName="t")
public class T implements Serializable{
private String userName;
private String password;
}
等同于public class T implements Serializable
{
private String userName;
private String password;
public static T t()
{
return new T();
}
@Data
包含@ToString
@EqualsAndHashCode
@Getter
non-final属性的@Setter
@RequiredArgsConstructor