gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章SpringBoot 2.x 整合Lombok的方法示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

简介 。

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

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

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

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

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

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

lombok 注解介绍:http://www.zzvips.com/article/157124.html 。

安装 lombok 插件 。

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

添加注解支持 。

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

添加依赖 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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 判空处理 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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;
 
}

相当于 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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;
   }
  }
}

测试 。

?
1
2
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 方法 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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 日志打印 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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 全参数构造函数 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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方法 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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() 方法排除字段 。

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

@value 用于注解final类 。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
package com.yanjun.mybatis.bean;
import lombok.value;
 
@value
public class user {
 
  integer id = 1 ;
 
  string name = "zhaoyanjun" ;
 
  integer age = 3 ;
}

编译后的代码 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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 : 被注解的类加个构造者模式 。

?
1
2
3
4
5
6
7
8
9
10
11
import lombok.builder;
 
@builder
public class user {
 
  public integer id;
 
  public string name;
 
  public integer age;
}

相当于以下代码 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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 + ")" ;
   }
  }
}

使用 。

?
1
2
3
4
5
6
7
8
userbuilder userbuilder = user.builder();
user user = userbuilder
     .age( 10 )
     .id( 1 )
     .name( "yanjun" )
     .build();
 
system.out.println( ": " + userbuilder.tostring());

@synchronized : 加个同步锁 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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 ;
  }
 
}

代码的效果相当于 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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 ;
   }
  }
}

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

原文链接:https://blog.csdn.net/zhaoyanjun6/article/details/80743302 。

最后此篇关于SpringBoot 2.x 整合Lombok的方法示例的文章就讲到这里了,如果你想了解更多关于SpringBoot 2.x 整合Lombok的方法示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com