SpringBoot 2.x 整合Lombok的方法示例

简介

lombok是一个编译级别的插件,它可以在项目编译的时候生成一些代码。比如日常开发过程中需要生产大量的JavaBean文件,每个JavaBean都需要提供大量的getset方法,如果字段较多且发生变动的话修改起来相对繁琐,相应的lombok可以通过注解(@getter,@setter)为我们省去手动创建gettersetter方法的麻烦,它能够在我们编译源码的时候自动帮我们生成gettersetter方法。

即它最终能够达到的效果是:在源码中没有gettersetter方法,但是在编译生成的字节码文件中有gettersetter方法。

另外在项目开发阶段,一个class的属性是一直变化的,今天可能增加一个字段,明天可能删除一个字段。每次变化都需要修改对应的模板代码。另外,有的class的字段超级多,多到一眼看不完。如果加上模板代码,更难一眼看出来。更有甚者,由于字段太多,想要使用builder来创建。手动创建builder和字段和原来的类夹杂在一起,看起来很凌乱。lombok@Builder即可解决这个问题。

官网地址:https://projectlombok.org/

lombok最新版本号:http://jcenter.bintray.com/org/projectlombok/lombok/

官方文档: https://projectlombok.org/features/all

lombok 注解介绍:https://www.jb51.net/article/151363.htm

安装 lombok 插件

添加注解支持

添加依赖

buildscript {
 ext {
  springBootVersion = '2.0.2.RELEASE'
 }
 repositories {
  mavenCentral()
 }
 dependencies {
  classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
 }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.yanjun'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
 mavenCentral()
}

dependencies {
 compile('org.springframework.boot:spring-boot-starter',
   'org.springframework.boot:spring-boot-starter-web',
 )

 //添加lombok依赖
 compile 'org.projectlombok:lombok:1.18.0'

}

常用注解

  • @Data 注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
  • @Setter :注解在属性上;为属性提供 setting 方法
  • @Setter :注解在属性上;为属性提供 getting 方法
  • @Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
  • @NoArgsConstructor :注解在类上;为类提供一个无参的构造方法
  • @AllArgsConstructor :注解在类上;为类提供一个全参的构造方法
  • @Cleanup : 可以关闭流
  • @Builder : 被注解的类加个构造者模式
  • @Synchronized : 加个同步锁
  • @SneakyThrows : 等同于try/catch 捕获异常
  • @NonNull : 如果给参数加个这个注解 参数为null会抛出空指针异常
  • @Value : 注解和@Data类似,区别在于它会把所有成员变量默认定义为private final修饰,并且不会生成set方法。

@NonNull 判空处理

package com.yanjun.mybatis.bean;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;

@Data
@NoArgsConstructor
public class User {

 public Integer age;

 @NonNull
 public String name;

}

相当于

package com.yanjun.mybatis.bean;

import lombok.NonNull;

public class User {
 public Integer age;
 @NonNull
 public String name;

 public Integer getAge() {
  return this.age;
 }

 @NonNull
 public String getName() {
  return this.name;
 }

 public void setAge(Integer age) {
  this.age = age;
 }

 public void setName(@NonNull String name) {
  if (name == null) {
   throw new NullPointerException("name is marked @NonNull but is null");
  } else {
   this.name = name;
  }
 }
}

测试

User user = new User();
user.setName(null);

效果

Exception in thread "main" java.lang.NullPointerException: name is marked @NonNull but is null
at com.yanjun.mybatis.bean.User.setName(User.java:7)
at com.yanjun.mybatis.LombokApplication.main(LombokApplication.java:15)

@Data 提供 get、set 方法

package com.yanjun.mybatis.bean;

import lombok.Data;

@Data //自动生成 get、set 方法
public class User {

 Integer id;

 String name;

 Integer age;

 public static void main(String[] args) {
  //测试方法
  User user = new User();
  user.setName("zhaoyanjun");
  user.setAge(20);
  user.setId(1);
 }

}

@Slf4j 日志打印

package com.yanjun.mybatis.bean;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;

@Data //自动生成 get、set 方法
@Slf4j //日志打印
public class User {

 Integer id;

 String name;

 Integer age;

 public static void main(String[] args) {
  User user = new User();
  user.setName("zhaoyanjun");
  user.setAge(20);
  user.setId(1);

  log.info("日志" + user.toString());

 }
}

@AllArgsConstructor 全参数构造函数

package com.yanjun.mybatis.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

@Data //自动生成 get、set 方法
@AllArgsConstructor //自动生成全参数构造函数
@Slf4j //日志打印
public class User {

 Integer id;

 String name;

 Integer age;

 public static void main(String[] args) {
  User user = new User(1, "zhaoyanjun", 20);

  log.info("日志" + user.toString());
 }
}

@ToString 自动生成toString方法

package com.yanjun.mybatis.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;

@Data //自动生成 get、set 方法
@AllArgsConstructor //自动生成全参数构造函数
@Slf4j //日志打印
@ToString(of = {"id","age"}) //tostring() 方法里面只打印 id ,name 字段
public class User {

 Integer id;

 String name;

 Integer age;

 public static void main(String[] args) {
  User user = new User(1, "zhaoyanjun", 20);

  log.info("日志" + user.toString());
 }
}

toString() 方法排除字段

//排除字段
@ToString(exclude = {"name"}) //tostring() 方法中,name 字段不参与打印

@Value 用于注解final类

@Value 注解和@Data类似,区别在于它会把所有成员变量默认定义为 private final 修饰,并且不会生成set方法。

package com.yanjun.mybatis.bean;
import lombok.Value;

@Value
public class User {

 Integer id = 1;

 String name = "zhaoyanjun";

 Integer age = 3 ;
}

编译后的代码

public final class User {
 private final Integer id = 1;
 private final String name = "zhaoyanjun";
 private final Integer age = 3;

 public User() {
 }

 public Integer getId() {
  return this.id;
 }

 public String getName() {
  this.getClass();
  return "zhaoyanjun";
 }

 public Integer getAge() {
  return this.age;
 }

 //省略部分代码
 ......
}

@Builder : 被注解的类加个构造者模式

import lombok.Builder;

@Builder
public class User {

 public Integer id;

 public String name;

 public Integer age;
}

相当于以下代码

package com.yanjun.mybatis.bean;

public class User {
 public Integer id;
 public String name;
 public Integer age;

 User(Integer id, String name, Integer age) {
  this.id = id;
  this.name = name;
  this.age = age;
 }

 public static User.UserBuilder builder() {
  return new User.UserBuilder();
 }

 public static class UserBuilder {
  private Integer id;
  private String name;
  private Integer age;

  UserBuilder() {
  }

  public User.UserBuilder id(Integer id) {
   this.id = id;
   return this;
  }

  public User.UserBuilder name(String name) {
   this.name = name;
   return this;
  }

  public User.UserBuilder age(Integer age) {
   this.age = age;
   return this;
  }

  public User build() {
   return new User(this.id, this.name, this.age);
  }

  public String toString() {
   return "User.UserBuilder(id=" + this.id + ", name=" + this.name + ", age=" + this.age + ")";
  }
 }
}

使用

UserBuilder userBuilder = User.builder();
User user = userBuilder
    .age(10)
    .id(1)
    .name("yanjun")
    .build();

System.out.println(": " + userBuilder.toString());

@Synchronized : 加个同步锁

package com.yanjun.mybatis.bean;

import lombok.Synchronized;

public class User {

 public Integer age;

 public String name;

 //普通方法,相当于对象锁
 @Synchronized
 int run1() {
  return 1;
 }

 //静态方法,相当于类锁
 @Synchronized
 static int run2() {
  return 2;
 }

}

代码的效果相当于

public class User {
 private final Object $lock = new Object[0];
 private static final Object $LOCK = new Object[0];
 public Integer age;
 public String name;

 public User() {
 }

 int run1() {
  Object var1 = this.$lock;
  synchronized(this.$lock) {
   return 1;
  }
 }

 static int run2() {
  Object var0 = $LOCK;
  synchronized($LOCK) {
   return 2;
  }
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • SpringBoot集成Redisson实现分布式锁的方法示例

    上篇 <SpringBoot 集成 redis 分布式锁优化>对死锁的问题进行了优化,今天介绍的是 redis 官方推荐使用的 Redisson ,Redisson 架设在 redis 基础上的 Java 驻内存数据网格(In-Memory Data Grid),基于NIO的 Netty 框架上,利用了 redis 键值数据库.功能非常强大,解决了很多分布式架构中的问题. Github的wiki地址: https://github.com/redisson/redisson/wiki 官方文档

  • Spring Boot利用Lombok减少Java中样板代码的方法示例

    前言 Lombok想要解决了的是在我们实体Bean中大量的Getter/Setter方法,以及toString, hashCode等可能不会用到,但是某些时候仍然需要复写,以期方便使用的方法:在使用Lombok之后,将由其来自动帮你实现代码生成,注意,其是在运行过程中,帮你自动生成的.就是说,将极大减少你的代码总量. Lombok的官方地址: https://projectlombok.org/ 其实说实话第一次听到Lombok的时候,是从一个带我的匈牙利老师傅那里学来的.那个时候他给了我一套J

  • Springboot 集成 lombok.jar过程解析

    这篇文章主要介绍了Springboot 集成 lombok.jar过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 介绍 Spring Boot是非常高效的开发框架,lombok是一套代码模板解决方案,将极大提升开发的效率,这里介绍给大家使用. Lombok想要解决了的是在我们实体Bean中大量的Getter/Setter方法,以及toString, hashCode等可能不会用到,但是某些时候仍然需要复写,以期方便使用的方法:在使用Lo

  • Spring Boot中lombok的安装与使用详解

    前言 众所周知Spring Boot是非常高效的开发框架,lombok是一套代码模板解决方案,将极大提升开发的效率,这里介绍给大家使用.文中详细介绍了lombok的安装与使用教程,话不多说了,来一起看看详细的介绍吧. 1. Lombok Lombok想要解决了的是在我们实体Bean中大量的Getter/Setter方法,以及toString, hashCode等可能不会用到,但是某些时候仍然需要复写,以期方便使用的方法:在使用Lombok之后,将由其来自动帮你实现代码生成,注意,其是在运行过程中

  • 详解Lombok安装及Spring Boot集成Lombok

    Lombok有什么用 在我们实体Bean中有大量的Getter/Setter方法以及toString, hashCode等可能不会用到,但是某些时候仍然需要复写:在使用Lombok之后,将由其来自动帮你实现代码生成.注意,其是在编译源码过程中,帮你自动生成的.就是说,将极大减少你的代码总量. Lombok的官方地址: https://projectlombok.org/ 使用Lombok时需要注意的点 在类需要序列化.反序列化时或者需要详细控制字段时,应该谨慎考虑是否要使用Lombok,因为在这

  • SpringBoot使用LomBok的示例代码

    Lombok是什么?它是一个能帮我们消除那些必须要写但是重复的代码,比如setter,getter,构造函数之类的方法. 首先先简单说一下idea安装lombok,有2种方法: 1.直接从http://plugins.jetbrains.com/下载,然后放到idea安装文件下面的plugins,然后重启idea 2.在idea的settings(windows)或者Preferences(mac),下找到plugins菜单,点击Browse repositories,如图 然后搜索lombok

  • 详解SpringBoot优雅编码之Lombok加持

    本文介绍了SpringBoot优雅编码之Lombok加持,分享给大家,具体如下: 概述 Lombok 通过提供简单的语法注解形式来帮助简化消除一些必须有但显得很臃肿的 java 代码.典型的是对于 POJO对象的简化(如自动帮我们生成Setter和Getter等),有了Lombok的加持,开发人员可以免去很多重复且臃肿的操作,极大地提高java代码的信噪比,因此我们必须尝试并应用起来! IntelliJ IDEA上配置 方法一:直接在IDEA界面中配置 首先进入Plugins界面: 然后搜索并安

  • SpringBoot集成WebSocket实现前后端消息互传的方法

    什么是WebSocket? WebSocket 协议是基于 TCP 的一种新的网络协议.它实现了浏览器与服务器全双工 (full-duplex) 通信-允许服务器主动发送信息给客户端. 为什么需要WebSocket? 大家都知道以前客户端想知道服务端的处理进度,要不停地使用 Ajax 进行轮询,让浏览器隔个几秒就向服务器发一次请求,这对服务器压力较大.另外一种轮询就是采用 long poll 的方式,这就跟打电话差不多,没收到消息就一直不挂电话,也就是说,客户端发起连接后,如果没消息,就一直不返

  • SpringBoot 2.x 整合Lombok的方法示例

    简介 lombok是一个编译级别的插件,它可以在项目编译的时候生成一些代码.比如日常开发过程中需要生产大量的JavaBean文件,每个JavaBean都需要提供大量的get和set方法,如果字段较多且发生变动的话修改起来相对繁琐,相应的lombok可以通过注解(@getter,@setter)为我们省去手动创建getter和setter方法的麻烦,它能够在我们编译源码的时候自动帮我们生成getter和setter方法. 即它最终能够达到的效果是:在源码中没有getter和setter方法,但是在

  • SpringBoot中整合MyBatis-Plus的方法示例

    MyBatis 框架相信大家都用过,虽然 MyBatis 可以直接在 xml 中通过 SQL 语句操作数据库,很是灵活.但正其操作都要通过 SQL 语句进行,就必须写大量的 xml 文件,很是麻烦.于是 MyBatis-Plus 应运而生,作为 MyBatis 的增强工具,更是为我们开发效率得到了质的飞跃. 一.简介 1.MyBatis MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工

  • 使用springboot对linux进行操控的方法示例

    1,在pom中导入 <dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>ganymed-ssh2</artifactId> <version>build210</version> </dependency> 2,编写工具类 package org.jeecg.modules.system.util; /** * @Description: *

  • SpringBoot详解整合Redis缓存方法

    目录 1.Spring Boot支持的缓存组件 2.基于注解的Redis缓存实现 3.基于API的Redis缓存实现 1.Spring Boot支持的缓存组件 在Spring Boot中,数据的缓存管理存储依赖于Spring框架中cache相关的org.springframework.cache.Cache和org.springframework.cache.CacheManager缓存管理器接口. 如果程序中没有定义类型为CacheManager的Bean组件或者是名为cacheResolve

  • springboot返回html和jsp的方法示例

    一.返回html (1)添加maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> (2)thymeleaf模板默认寻找resources下,templates文件夹放html页面,static文件夹放css及js (3)引入

  • Spring Boot整合Lombok的方法详解

    上篇文章给大家介绍了,喜欢的朋友点击查看下. SpringBoot 开发提速神器 Lombok+MybatisPlus+SwaggerUI Lombok为啥这么牛逼?SpringBoot和IDEA官方都要支持它 一.Lombok简介 Lombok 是一种 Java 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO).它通过注释实现这一目的.通过在开发环境中实现  Lombok,开发人员可以节省构建诸如 hashCode() 和 equals() 这样

  • SpringBoot整合Swagger的方法示例

    依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactI

  • 使用Springboot搭建OAuth2.0 Server的方法示例

    OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版. 本文对OAuth 2.0的设计思路和运行流程,做一个简明通俗的解释,主要参考材料为RFC 6749. OAuth 简介 OAuth 是由 Blaine Cook.Chris Messina.Larry Halff 及 David Recordon 共同发起的,目的在于为 API 访问授权提供一个安全.开放的标准. 基于 OAuth 认证授权具有以下特点: 安全.OAuth 与别的授

  • Nginx整合Kafka的方法示例

    背景 nginx-kafka-module是nginx的一个插件,可以将kafka整合到nginx中,便于web项目中前端页面埋点数据的收集,如前端页面设置了埋点,即可将用户的一些访问和请求数据通过http请求直接发送到消息中间件kafka中,后端可以通过程序消费kafka中的消息来进行实时的计算.比如通过SparkStream来实时的消费Kafka中的数据来分析用户PV,UV.用户的一些行为及页面的漏斗模型转化率,来更好的对系统进行优化或者对来访用户进行实时动态的分析. 具体整合步骤 1.安装

  • SpringBoot入门之集成Druid的方法示例

    Druid:为监控而生的数据库连接池.这篇先了解下它的简单使用,下篇尝试用它做多数据源配置. 主要参考:https://github.com/alibaba/druid/wiki/ 常见问题https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter 一.引入依赖 这里看其他博客都是引用的Druid,由于是使用springboot集成,这里参考druid官方文档,用的是druid-spring-boot-starte

随机推荐