开发神器-神奇插件Lombok让饱受臃肿之说骚扰的java美眉得到了新生

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010508829/article/details/80180502

开发神器-神奇插件Lombok让臃肿的java美眉得到新生

本文环境:java8 eclipse maven3.5 Springboot 2.0.1

Lombok是什么

lombok是一个神奇的开发插件,他能够通过简单的注解,来把代码中的重复大量的样板代码进行一个简单的替换,如set/get方法以及equals和hashCode实现等~。

Lombok的安装

两步进行插件的安装

1. Eclipse插件安装【idea安装只需要在插件市场里搜索lombox plugin 安装即可】

  1. jar包下载

    • 官方下载,找到lombok版本中选择1.16.20进行下载,拷贝进项目中[本文采用maven导入,与拷贝区别不大]
    • 下载地址:lombok all-versions
  2. 打开jar包

    • 双击打开即可。
    • 如果不可以打开就使用命令行打开 [java -jar lombok.jar]
  3. 打开之后安装

  4. 检查一下Eclipse是否安装成功

2. jar包引入

本文采用lombok 1.16.20版本

maven导入,拷贝进pom文件

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

Lombok怎么用 (常用注解)

Lombok以注释的方式使用,只需要在需要生成通用方法的地方加上对应的注释,即可快速的实现开发

@getter和@Setter

这两个注解分别生成Getter与Setter方法

//在属性上注解
public class UserGetterSetter {
//  在属性上注解,这样就会对应的生成get/set方法
    @Getter @Setter 
    private String name;
    @Getter @Setter 
    private Integer age;
}

//在类上注解,这样所有属性都会生成get/set方法
@Getter @Setter 
public class UserGetterSetter {
    private String name;
    private Integer age;
}

@NonNull

这个注解会快速的检查当前值是否为空,如果为空则抛NullPointerException异常

public class UserNonNull {
//  用了@NonNull这个注解,在构造set等方法中都会进行非空判断
    @Getter @Setter @NonNull
    private String name;
}

@ToString

这个注解生成toString方法,如果需要排除输出属性可在内

//      callSuper 是否输出超类属性方法,exclude排除某属性
@ToString(callSuper=true,exclude="interest")
public class UserToString extends UserGetterSetter{
    private String sex="男";
    private String interest="女";
}

@EqualsAndHashCode

这个注解生成equals和hashCode方法

//      与ToString注解用法基本相似
//      callSuper 生成时是否包含超类,exclude排除某属性
@EqualsAndHashCode(callSuper=true,exclude= {"interest","money"})
public class UserEqualsAndHashCode extends UserGetterSetter{
    private String sex="男";
    private String interest="女";
    private Double money=100.0;
}

@Data

这个注解最常用,它结合了功能成@ToString, @EqualsAndHashCode, @Getter和@Setter

//@Data
//@Data设置staticConstructor属性可以生成静态工厂方法,生成参数指定名称的静态工厂方法
@Data(staticConstructor="getUserData")
public class UserData{
    private String name;
    private Integer age;
    private String sex="男";
    private String interest="女";
    private Double money=100.0;
}

@Cleanup

  • @Cleanup注解,确保分配资源被释放。
  • 使用时要考了清理会不会引发异常,如果引发了,由于使用了@Cleanup注解问题会被埋藏起来,看日志报错很难找到根源。
public class CleanupTest {

//  实现资源释放
//  加注解
    public void testCleanUpLombox() {
        try {
            @Cleanup ByteArrayOutputStream baos = new ByteArrayOutputStream();
            baos.write(new byte[] {'Y','e','s'});
            System.out.println(baos.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
//  原始方式
    public void testCleanUp() {
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            try {
                baos.write(new byte[]{'Y', 'e', 's'});
                System.out.println(baos.toString());
            } finally {
                baos.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

@synchronized

这个注解作用是快速生成线程同步的模版。在方法上使用整个方法线程安全。也可以在对象上使用,会造成死锁。不建议在变量上使用。

public class SynchronizedTest{
    // 使用注解
    @Synchronized
    public void synchronizedTestLombox() {
        System.out.println("----1-----");
        System.out.println("----2-----");
        System.out.println("----3-----");
        System.out.println("----木-----");
        System.out.println("----头-----");
        System.out.println("----人-----");
    }
    // 不使用注解    
    private final java.lang.Object $lock = new java.lang.Object[0];
    public void synchronizedTest() {
        synchronized ($lock) {
            System.out.println("----1-----");
            System.out.println("----2-----");
            System.out.println("----3-----");
            System.out.println("----木-----");
            System.out.println("----头-----");
            System.out.println("----人-----");
        }
    }
}

@Slf4j

快速生成日志模版, 最好用的注解之一,与@Data并驾齐驱
只需要在类的开头加上注解,就ok了,记得加上日志依赖,本文使用的是SpringBoot默认日志框架logback

@Slf4j
public class Slf4jTest {

    public void testSlf4j() {
        log.debug("这是debug");
        log.info("这是Info");
        log.error("这是error");

        Integer errorCode = 11;
        log.error("这是error 错误代号={}", errorCode);// 传入值为object,打印时中括号会背代替掉
    }
}

感谢您的耐心阅读,由于我还是一个未经世事的美男子,无法面面俱到的给您讲出我的内心想法,如有错误之处,请多多指正!

江湖再见,欢迎您关注我!image

本文采用资料有 :
Lombok 官方文档
本文项目源代码 :
GarfieldHuang/JavaDemo

猜你喜欢

转载自blog.csdn.net/u010508829/article/details/80180502