SpringBoot开发学习笔记(1)--- lombok学习

(1)用途:以注解形式减少了JAVA的冗余代码,特别适合POJO;

(2)安装:maven依赖加入:

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
</dependency>

idea中添加lombok插件

(3)简单使用:

e.g.:

@Entity
@DynamicUpdate
@Data
public class ProductCategory {

    /**
     * 类目id.
     */
    @Id
    @GeneratedValue
    private Integer categoryId;

    /**
     * 类目名字.
     */
    private String categoryName;

    /**
     * 类目编号.
     */
    private Integer categoryType;

    public ProductCategory() {
    }

    public ProductCategory(String categoryName, Integer categoryType) {
        this.categoryName = categoryName;
        this.categoryType = categoryType;
    }
}

@Data注解将在编译时自动生成getter,setter方法,使代码更加简洁,

例如(引自https://segmentfault.com/a/1190000007966713):

import lombok.ToString;
@ToString(exclude="id")
public class ToStringExample {
    private int id;
    private String name;
    private String[] tags;
}

编译后

import java.util.Arrays;

public class ToStringExample {
  public String toString() { 
    return "ToStringExample(name=" + this.name + ", tags=" + Arrays.deepToString(this.tags) + ")"; 
  }
  
  private int id;
  private String name;
  private String[] tags;
}

从网上查询了解和阅读源码,其一些注解的用途有:

@Data   :注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
@Setter:注解在属性上;为属性提供 setting 方法
@Getter:注解在属性上;为属性提供 getting 方法
@Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
@NoArgsConstructor:注解在类上;为类提供一个无参的构造方法
@AllArgsConstructor:注解在类上;为类提供一个全参的构造方法
@ToString:写 toString 方法时使用了 Arrays类的 静态方法 deepToString

  • exclude 参数:可以指定哪些属性不出现在 toString 方法中, 比如 exclude={"id", "name"}
  • doNotUseGetters 参数:当类中有成员变量的 getter 方法时,生成 toString 方法会使用这些 getter 方法
  • includeFieldNames参数:原本是以 fieldName = fieldValue 的格式来生成 toString 方法的,但是将该参数设置为 false 后(默认是 true),就不会显示 fieldName 了,而只是生成 fieldValue

  • callSuper 参数: 若类 A 是类 B 的子类,那么在 A 类重写 toString 时,若把该参数设置为 true,会加入下面这段代码,即也会把父类 B 的 toString 也写入。

@NonNull :检查传入对象是否为 Null,若为null,则抛出NullPointerException异常。

@EqualsAndHashCode: 用在类上,用于生成 equals 和 hashcode 方法。

@Cleanup :该注解可以用来自动管理资源,用在局部变量之前,在当前变量范围内即将执行完毕退出之前会自动清理资源, 自动生成try­finally这样的代码来关闭流。

@Value :该注解用于修饰类,是@Data的不可变形式, 相当于为成员变量添加final声明, 只提供getter方法, 而不提供setter方法, 然后还有 equals/hashCode/toString方法,以及一个包含所有参数的构造方法。

@builder: 用在类、构造器、方法上,为你提供复杂的builder APIs

@SneakyThrows: 自动抛受检异常, 而无需显式在方法上使用throws语句。

@Synchronized: 用在方法上,将方法声明为同步的,并自动加锁,而锁对象是一个私有的属性 LOCK,而java中的synchronized关键字锁对象是this,锁在this或者自己的类对象上存在副作用,就是你不能阻止非受控代码去锁this或者类对象,这可能会导致竞争条件或者其它线程错误。

 

其它用法,可参见https://segmentfault.com/a/1190000007966713:

 

 

转载于:https://my.oschina.net/cjbcool0816/blog/1577554

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值