lombok
lombok是一个可以大幅减少java模板代码的工具类
灵活的配置每个
Lombok
的配置项
- 可以在任何目录中创建。作用于该目录和其子目录
lombok.config
中配置项config.stopBubbling=true
指明lombok
的根目录为当前配置文件所在目录- 配置文件是分层的,原则是接近源文件的配置设置优先
- 根目录的子目录中可以创建
lombok.config
配置文件,来覆盖根目录的配置文件 - 在配置文件的顶部,可以导入其他配置文件。
import ../conf/aaa.config
使用
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
1、@Getter和@Setter注解
@Getter
和@Setter
给我自动添加对应的Getter和Setter方法,该注解可以添加在属性头部,也可以添加在类的头部
对应的方法的访问修饰符通过AccessLevel
控制
public enum AccessLevel {
PUBLIC,
MODULE,
PROTECTED,
PACKAGE,
PRIVATE,
NONE;
private AccessLevel() {
}
}
静态属性
不会产生对应的Getter方法和Setter方法
final
类型的属性只会产生Getter方法
2.@ToString
自动生成toString
方法,如果某些字段不需要出现在toString方法中,可以通过exclude
属性指定要排除的属性
@ToString(exclude = {"id","deleted"})
public class User {
@TableId(type = IdType.ASSIGN_ID)//MP注解
private Long id;
private String name;
private Integer age;
@TableField(value = "email",fill = FieldFill.INSERT)
private String mail;
@TableLogic
@TableField(value = "is_delete",fill = FieldFill.INSERT)
private Boolean deleted = Boolean.FALSE;
}
或者我们需要指定某些变量出现在toString方法
中,可以通过of
属性实现
@ToString(of = {"name","age","mail"})
public class User {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
private String name;
private Integer age;
@TableField(value = "email",fill = FieldFill.INSERT)
private String mail;
}
3.EqualsAndHashCode
@EqualsAndHashCode
@EqualsAndHashCode(exclude = {"address","age"})//排除某些属性
@EqualsAndHashCode(of = {"id"})//指定某些特定的属性来equals和hashCode
public class User05 {
private Integer id;
private String userName;
private String password;
private String address;
private Integer age;
}
4.NonNull
该注解添加在方法的参数前面表示该参数不能为空,否则抛NullpointException
5.构造器注解
NoArgsConstractor
:无参的构造器
RequiredArgsConstructor
:添加必要的有参构造器
被@NonNull
修饰的成员变量和final修饰成员变量【未初始化】
AllArgsConstructor
:添加具有所有成员变量的构造器
public void say(@NonNull String msg) {
if (msg == null) {
throw new NullPointerException("msg is marked non-null but is null");
} else {
System.out.println(msg);
}
}
6.Data注解
@Data
其实是一个集成了 @Getter/@Setter+@ToString +@EqualsAndHashCode + @RequiredArgsConstructor
注解
7.@Builder
提供一种对象链式调用
的方式,会帮我们在POJO类中创建一个对应的内部类来实现该操作
@Synchronized
public static void main(String[] args) {
User user = User.builder()
.id(1L)
.name("zhaobuwang")
.age(21)
.mail("test@qq.com")
.build();
log.info("hello world");
}
8.@Log
使用位置:类
它将为你生成一个 static final log = 你的类名
字段
注解类型 | 对应 Log 类 |
---|---|
@CommonsLog | org.apache.commons.logging.LogFactory.getLog(LogExample.class); |
@Flogger | com.google.common.flogger.FluentLogger.forEnclosingClass(); |
@JBossLog | org.jboss.logging.Logger.getLogger(LogExample.class); |
@Log | java.util.logging.Logger.getLogger(LogExample.class.getName()); |
@Log4j | org.apache.log4j.Logger.getLogger(LogExample.class); |
@Log4j2 | org.apache.logging.log4j.LogManager.getLogger(LogExample.class); |
@Slf4j | org.slf4j.LoggerFactory.getLogger(LogExample.class); |
@XSlf4j | org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class); |
注意事项
- 如果已存在名为
log
的字段,则将发出警告,并且不会生成任何代码。
@Slf4j
public class User {
@TableId(type = IdType.ASSIGN_ID)//MP注解
private Long id;
private String name;
private Integer age;
@TableField(value = "email",fill = FieldFill.INSERT)
private String mail;
@TableLogic
@TableField(value = "is_delete",fill = FieldFill.INSERT)
private Boolean deleted = Boolean.FALSE;
@Synchronized
public static void main(String[] args) {
log.info("hello world");
}
}
9.@Cleanup
自动关闭IO流
public static void main(String[] args) throws IOException {
@Cleanup InputStream in = new FileInputStream("aaa.txt");
@Cleanup OutputStream out = new FileOutputStream("bbb.txt");
int num = 0;
byte[] b = new byte[1024];
while((num = in.read(b)) != -1){
out.write(b,0,num);
}
}
10、@Synchronized
使用位置:方法
是 synchronized
方法修饰符的更安全变体,与 synchronized
方法修饰符相似,只能用在静态方法上。 synchronized
锁定在 this
上,而注解锁定在 $LOCK
的静态字段。
可填写的值 | 类型 | 默认值 | 描述 |
---|---|---|---|
value | String | "" | 选择锁定的字段名 |
@Synchronized("wangwang")
public static void main(String[] args) {
log.info("hello world");
}