1.优点
- 自动生成构造器、getter/setter、equals、hashcode、toString等方法,提高了一定的开发效率。
- 让代码变得简洁,不用过多的去关注相应的方法
- 更改属性时省去了手动增删getter和setter方法这些代码的麻烦。
2.缺点
- 不支持多种参数构造器的重载。
- 降低了源代码的可读性和完整性。
3.常用注解使用
1. @Data
注解在类上,为类的所有属性自动生成setter/getter方法,为类生成equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。
使用注解:
@Data
public class User {
private String name;
private Integer age;
}
不使用注解:
public class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
2. @AllArgsConstructor
注解在类上,生成全参构造器。与之类似的两个注解:@NoArgsConstructor(生成无参构造器),@RequiredArgsConstructor(部分参数构造器)
使用注解:
@AllArgsConstructor
public class User {
private String name;
private Integer age;
}
不使用注解:
public class User {
private String name;
private Integer age;
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
}
3. @Slf4j
注解在类上,替换private final Logger logger = LoggerFactory.getLogger(XXX.class);
使用注解:
@Slf4j
public class User {
public void sayHello(){
log.info("hello");
}
}
不使用注解:
public class User {
Logger log = LoggerFactory.getLogger(User.class);
public void sayHello(){
log.info("hello");
}
}
4. Lombok不生效问题
打开idea的Settings -> Build,Execution,Deployment -> Compiler -> Annotation Processors 勾选 Enable annotation processing
image