Lombok简介

Lombok简介

Lombok主要作用是降低Java项目中的冗余代码,特别是Java bean中的Getter和Setter方法,当然也可以处理toString()、equals()和hashCode()方法,如果使用熟练,也可以单独定义每一个你觉得需要单独处理的属性。

安装Idea插件

一般情况下使用Lombox需要安装Lombok jar包,但是在Idea中只需要安装一个Lombok Plugin就可以,非常方便。
选择File—–>Settings——>Plugins,在搜索框中输入Lombok,搜索然后安装Lombok plugin,目前的版本是:0.15.17.2,等待安装完成之后重启Idea就可以了。

使用

在maven项目中增加依赖:

        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>

当我们在编写一个bean的时候,正常先写属性,然后Getter和Setter,虽然idea可以自动生成,但是秉承能少则少能懒则懒的原则,我们使用注解:

@Getter
@Setter

使用这两个标签之后,代码里不会多Getter和Setter,但是查看代码结构,可以在structure中看到Getter和Setter,不用怀疑,build项目的时候,Getter和Setter一定会被正常的编译生成到jar包里。
所以能够看出来,使用lombok生成代码其实就是使用一个个的注解自动生成代码,介绍一下常用注解。

注解

@Getter

最基本的功能是自动生成getter方法,默认都是public级别的,如果想要定制,需要使用一个参数指定getter方法的属性:

@Getter(AccessLevel.PROTECTED) private int number;

一旦这样写了,number的getter方法将会变成protect级别的

@Setter

参照Getter方法的使用方式

@toString

自动生成toString方法,也可以使用exculde参数排除不想被toString方法处理的参数。

@ToString(exclude="a")
public @Data class Test {
    private String b;
    private int c;
    private String d;
}

如果这么写,那么参数a将不会胡现在toString方法的内部。

@hashCode

自动生成hashCode方法,参照toString的使用方式

@equals

自动生成equals方法,参照toString的使用方式

@NonNull

在方法的参数中添加@NonNull注解,在方法执行时将会自动检查参数是否为空,如果为空会抛出一个空指针异常。

public String getName(@NonNull Person p){
    return p.getName();
}

@Cleanup

在资源变量前面使用Cleanup参数,将会在方法结束后默认调用资源的close方法关闭资源,避免手动关闭。(注:这个地方与JAVA 7后提供的自动关闭有区别,JAVA 7的自动关闭其实并没有在代码执行完毕后立刻执行,所以有时候会出现删除资源占用的文件失败的问题,而Lombok则实际生成了close代码,只是隐藏起来,会正常的关闭资源)

 @Cleanup InputStream in = new FileInputStream(filein);
 @Cleanup OutputStream out = new FileOutputStream(fileout);

请自行脑补try—catch—finally结构代码块,太长不想写。

@NoArgsConstructor/@RequiredArgsConstructor/@AllArgsConstructor

构造方法注解,第一个生成无参构造参数,第二个生成带有所有非空参数(@NonNull注解)或者final成员变量构造方法,第三个生成包含全部参数的构造方法。(注:如果成员变量有final修饰的话,不能使用@NoArgsConstructor)

@Data

这个注解包括了getter、setter、toString、hashcode、equals和RequiredArgsConstructor注解,生成以上注解生成的所有代码。

@Value

包括getter、toString、hashcode、equals和RequiredArgsConstructor注解,并且会把所有的成员变量认为是private final修饰的变量。

@SneakyThrows

修饰一个方法,会把方法体内的代码用try-catch包起来,捕获的异常用Lombok.sneakyThrow(e)抛出来,可以指定异常:

@SneakyThrows(Exception.class)

@Synchronized

跟synchronized关键字效果相同,但是锁对象不同,对于类方法和实例方法,synchronized关键字的锁对象分别是类的class对象和this对象,@Synchronized的锁对象是private static final对象和private final对象。可以指定锁对象:

    private final Object lock = new Object();

    @Synchronized("lock")
    public void test() {
        System.out.println("test");
    }

@Log

便捷使用log的注解,我一般用@Slf4j。实际如下:

@CommonsLog
private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
@JBossLog
private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);
@Log
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4j
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
@Log4j2
private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
@Slf4j
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
@XSlf4j
private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);

总结

一个想尽办法帮程序员偷懒的发明。

你可能感兴趣的:(开发工具,JAVA基础,Lombok,java,idea)