lombok

lombok

lombok是一个可以大幅减少java模板代码的工具类

灵活的配置每个 Lombok 的配置项

  1. 可以在任何目录中创建。作用于该目录和其子目录
  2. lombok.config中配置项config.stopBubbling=true指明lombok的根目录为当前配置文件所在目录
  3. 配置文件是分层的,原则是接近源文件的配置设置优先
  4. 根目录的子目录中可以创建lombok.config配置文件,来覆盖根目录的配置文件
  5. 在配置文件的顶部,可以导入其他配置文件。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
@CommonsLogorg.apache.commons.logging.LogFactory.getLog(LogExample.class);
@Floggercom.google.common.flogger.FluentLogger.forEnclosingClass();
@JBossLogorg.jboss.logging.Logger.getLogger(LogExample.class);
@Logjava.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4jorg.apache.log4j.Logger.getLogger(LogExample.class);
@Log4j2org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
@Slf4jorg.slf4j.LoggerFactory.getLogger(LogExample.class);
@XSlf4jorg.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 的静态字段。

可填写的值类型默认值描述
valueString""选择锁定的字段名
@Synchronized("wangwang")
public static void main(String[] args) {
   log.info("hello world");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值