Lombok
因为Spring Boot中有默认依赖的lombok版本,所以只要引入依赖即可
xml
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>对于
<version>${lombok.version}</version>可加可不加
基本使用
idea也需要安装lombok插件来得到更好的代码提示信息(使用相关注解后属性颜色不再为灰色,而是紫色,方法也不会再出现识别不出而报错)

在加入Lombok依赖后,可以使用如下几个注解来简化bean的开发
@Data:用于类上,给类中所有的属性添加get方法、set方法、toString方法和重写equals和hashCode方法@Setter:用于类上,给类中的所有属性添加set方法@Getter:用于类上,给类中的所有属性添加get方法@ToString:用于类上,给类重写toString方法@EqualsAndHashCode:用于类上,给类重写equals和hashCode方法,默认行为callSuper = false,生成的equals()和hashCode()方法不调用父类的equals()和hashCode()方法
@NoArgsConstructor:用于类上,给类添加无参构造方法@AllArgsConstructor:用于类上,给类添加满参构造方法@Slf4j:用于类上,导入日志模块,可以通过log对象去调用日志中的方法log.info("name: {}, age: {}, address: {}", name, age, address);:通过log对象可以将日志信息打印到控制台,减少样板代码,使代码更加简洁
@RequiredArgsConstructor(onConstructor_ = {@Lazy, @Autowired}):给final修饰的属性或者带有@NonNull注解的字段添加构造方法,并添加@Lazy和@Autowired注解@Accessors(chain = true):让Lombok自动生成支持链式调用的setter方法。默认情况下,Lombok的setter方法会返回void,而启用chain = true后,setter方法会返回当前对象(this)@SneakyThrows:注解标注一个方法时,可以直接调用那些会抛出检查型异常的方法,而不需要显式地捕获或声明抛出这些异常。Lombok在编译时会自动生成相应的异常处理代码,通常是将异常包装成一个运行时异常(unchecked exception),然后抛出
javaprivate static final Logger logger = LoggerFactory.getLogger(User.class);Spring传统的日志记录方法,使用SLF4J(Simple Logging Facade for Java)作为日志门面,来获取一个特定类的日志记录器,两者使用上保持一致
@Builder注解
生成Builder模式的代码
- 创建一个名为
ThisClassBuilder的内部静态类,并具有和实体类形同的属性(称为构建器)- 在构建器中:
- 对于目标类中的所有的属性和未初始化的
final字段(对于final修饰的属性不会生成对应的build方法),都会在构建器中创建对应属性- 创建一个无参的
default构造函数- 对于实体类中的每个参数,都会对应创建类似于
setter的方法,只不过方法名与该参数名相同。 并且返回值是构建器本身(便于链式调用)- 生成一个
build()方法,调用此方法,就会根据设置的值进行创建实体对象- 同时也会生成一个
toString()方法- 在实体类中:
- 会创建一个
builder()方法,用来创建构建器
手写简单的builder实现User.java
java
public class User {
private String username;
private String password;
User(String username, String password) {
this.username = username;
this.password = password;
}
public static User.UserBuilder builder() {
return new User.UserBuilder();
}
public static class UserBuilder {
private String username;
private String password;
UserBuilder() {
}
public User.UserBuilder username(String username) {
this.username = username;
return this;
}
public User.UserBuilder password(String password) {
this.password = password;
return this;
}
public User build() {
return new User(this.username, this.password);
}
public String toString() {
return "User.UserBuilder(username=" + this.username + ", password=" + this.password + ")";
}
}
}javaUser user = User.builder() .username("yxx") .password("yxx") .build();
