Lombok使用
作用
减少重复的代码书写, 增加代码的可读性, 降低信噪比.
导入
maven:
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
gradle:
// https://mvnrepository.com/artifact/org.projectlombok/lombok
providedCompile group: 'org.projectlombok', name: 'lombok', version: '1.18.12'
配置
只要导入即可使用, 但是IDE中需要下载相应的插件, 否则会报错(但是能够编译通过).
使用
使用方式为注解方式
@Data
该注解会写下getter, setter, 和toString方法.
该注解有一个参数staticConstructor, 可以指定生成相应的静态工厂方法(该参数不能和@AllArgsConstructor与@NoArgsConstructor同时使用).
样例:
@Data(staticConstructor = "of")
public class User {
private Long id;
private String userName;
private String password;
}
相当于:
public class User {
private Long id;
private String userName;
private String password;
public Long getId() {
return id;
}
public void setId(Long 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 static User of() {
return new User();
}
}
@Getter
该注解会加入getter方法.
设置在类名上则给所有的字段都加上getter方法, 设置在字段上则只给该字段加入getter方法.
@setter
该注解会加入setter方法, 使用方法和@Getter大致相同.
@AllArgsConstructor
该注解会自动生成一个带参数的构造方法.
@NoArgsConstructor
该注解会自动生成一个无参构造方法.
@RequiredArgsConstructor
该注解会生成一个构造方法, 其只包含标有@NonNul等约束的注解和final的字段.
@EqualsAndHashCode
该注解会自动生成equals和HashCode方法.
@EqualsAndHashCode.Exclude
该注解标记在字段上, 这样生成equals()
和hashCode()
方法时会忽略这些字段.
@EqualsAndHashCode.Include
该注解需要在@EqualsAndHashCode
中加上onlyExplicitlyIncluded = true
才能使用, 未加上该注解的字段会被忽略.
@Value
该注解相当于@ToString + @EqualsAndHashCode + @AllArgsConstructor + @Getter
@Log
该注解相当于在类中加入了:
Logger log = LoggerFactory.getLogger(User.class);
也可以使用一下几种具体的log:
@Slf4j, @Log4j, @Log4j2, @XSlf4j, @CommonsLog, @Flogger, @JBossLog
@FieldDefaults
设置属性的使用范围
若设置makeFinal = true
, 则字段均被final修饰.
level为设置字段的使用范围, 比如@FieldDefaults(level = AccessLevel.PRIVATE)
为设置所有字段为private(字段应该为缺省状态, 否则以自己加入的修饰符为主).
@Builder
该注解会给类加上构建者方法, 加入后我们可以使用下面类似的方法:
User user = User.builder()
.id(1L)
.userName("boba")
.password("123456").build();
@Synchronized
该注解用在方法上, 对于类方法, 它会给类生成private final Object readLock = new Object();
, 并在该方法上给readLock
上锁, 对于静态方法, 它会给类生成private static final Object $LOCK = new Object[0];
, 在该方法上给$LOCK上锁