SpringBoot集成Lombok

介绍

Spring Boot是非常高效的开发框架,lombok是一套代码模板解决方案,将极大提升开发的效率,这里介绍给大家使用。

Lombok想要解决了的是在我们实体Bean中大量的Getter/Setter方法,以及toString, hashCode等可能不会用到,但是某些时候仍然需要复写,以期方便使用的方法;在使用Lombok之后,将由其来自动帮你实现代码生成,注意,其是在运行过程中,帮你自动生成的。就是说,将极大减少你的代码总量。

安装

在SpringBoot1.4.1项目的pom.xml中新增如下信息:

<dependency>

<groupId>org.projectlombok</groupId>

<artifactId>lombok</artifactId>

</dependency>

 注意这里无需指定版本,因为Spring Boot中已经默认引入了这个类库,且指定了其scope。 这个即将lombok引入了项目,可以引用其类库标注

下载lombok最新版本:https://www.projectlombok.org/download  使用cmd命令java -jar 你的lombok jar路径,然后会弹出一个框 这里会自动搜索你的eclipse安装路径(如果搜索不到,自行选择),如下图

安装完成后在你的sts安装路径下回有一个lombok.jar。同时你也可以看看sts.ini里面是否多了个lombok

Lombok注解

  • val:用在局部变量前面,相当于将变量声明为final
  • @NonNull:给方法参数增加这个注解会自动在方法内对该参数进行是否为空的校验,如果为空,则抛出NPE(NullPointerException)
  • @Cleanup:自动管理资源,用在局部变量之前,在当前变量范围内即将执行完毕退出之前会自动清理资源,自动生成try-finally这样的代码来关闭流

@Getter/@Setter:用在属性上,再也不用自己手写setter和getter

  • 方法了,还可以指定访问范围
  • @ToString:用在类上,可以自动覆写toString方法,当然还可以加其他参数,例如@ToString(exclude=”id”)排除id属性,或者@ToString(callSuper=true, includeFieldNames=true)调用父类的toString方法,包含所有属性
  • @EqualsAndHashCode:用在类上,自动生成equals方法和hashCode方法
  • @NoArgsConstructor,@RequiredArgsConstructor,@AllArgsConstructor:用在类上,自动生成无参构造和使用所有参数的构造函数以及把所有@NonNull属性作为参数的构造函数,如果指定staticName = “of”参数,同时还会生成一个返回类对象的静态工厂方法,比使用构造函数方便很多
  • @Data:注解在类上,相当于同时使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstrutor这些注解,对于POJO类十分有用
  • @Value:用在类上,是@Data的不可变形式,相当于为属性添加final声明,只提供getter方法,而不提供setter方法

代码示例

  • val

    val示例

    public static void main(String[] args) {

        val sets = new HashSet<String>();

        val lists = new ArrayList<String>();

        val maps = new HashMap<String, String>();

        //=>相当于如下

        final Set<String> sets2 = new HashSet<>();

        final List<String> lists2 = new ArrayList<>();

        final Map<String, String> maps2 = new HashMap<>();

    }

    @NonNull示例

     

    public void notNullExample(@NonNull String string) {

      string.length();

    }

    //=>相当于

     public void notNullExample(String string) {

       if (string != null) {

          string.length();

       } else {

          throw new NullPointerException("null");

       }

    }

    @Cleanup示例

    public static void main(String[] args) {

        try {

            @Cleanup InputStream inputStream = new FileInputStream(args[0]);

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        }

        //=>相当于

        InputStream inputStream = null;

        try {

            inputStream = new FileInputStream(args[0]);

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        } finally {

            if (inputStream != null) {

                try {

                    inputStream.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

    }

    @Getter/@Setter示例

    @Setter(AccessLevel.PUBLIC)

    @Getter(AccessLevel.PROTECTED)

    private int id;

    private String shap;

    @ToString示例

    @ToString(exclude = "id", callSuper = true, includeFieldNames = true)

    public class LombokDemo {

        private int id;

        private String name;

        private int age;

     

        public static void main(String[] args) {

            //输出LombokDemo(super=LombokDemo@48524010, name=null, age=0)

            System.out.println(new LombokDemo());

        }

    }

    @EqualsAndHashCode示例

    @EqualsAndHashCode(exclude = {"id", "shape"}, callSuper = false)

    public class LombokDemo {

        private int id;

        private String shap;

    }

     

    @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor示例

    @NoArgsConstructor

    @RequiredArgsConstructor(staticName = "of")

    @AllArgsConstructor

    public class LombokDemo {

        @NonNull

        private int id;

        @NonNull

        private String shap;

        private int age;

        public static void main(String[] args) {

            new LombokDemo(1, "circle");

            //使用静态工厂方法

            LombokDemo.of(2, "circle");

            //无参构造

            new LombokDemo();

            //包含所有参数

            new LombokDemo(1, "circle", 2);

        }

    }

    @Data示例

    import lombok.Data;

    @Data

    public class Menu {

        private String shopId;

        private String skuMenuId;

        private String skuName;

        private String normalizeSkuName;

        private String dishMenuId;

        private String dishName;

        private String dishNum;

        //默认阈值

        private float thresHold = 0;

        //新阈值

        private float newThresHold = 0;

        //总得分

        private float totalScore = 0;

    }

    @Value示例

    @Value

    public class LombokDemo {

        @NonNull

        private int id;

        @NonNull

        private String shap;

        private int age;

        //相当于

        private final int id;

        public int getId() {

            return this.id;

        }

猜你喜欢

转载自blog.csdn.net/pangpengshuai/article/details/81745187