- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
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 插件 。
添加注解支持 。
添加依赖 。
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'
}
|
常用注解 。
@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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
SpringBoot-Admin 服务监控 简单介绍 Spring Boot Actuator 是 Spring Boot 自带的一个功能模块, 提供了一组已经开箱即用的生产环境下常用
我想查找通过关键字匹配字段 nameEnglish 或 nameChinese 的模型列表。我花了一个多小时谷歌搜索但我做不到。请帮忙。 Springboot Mongo 入门示例 https://s
(请注意:在调查 this issue 时,我更好地发现了我在此处介绍的问题根源) 我对 Hibernate 和 SpringBoot 非常陌生。我的项目涉及一个搜索引擎,其中索引(javafx 客户
我最近有一个 Web 应用程序从 springboot 升级到 springboot 2。当我将其部署到 Tomcat 8 时,它似乎启动了,但没有完全启动。 在 localhost.2019-09-
我是 Spring boot 的新手...我在运行 Controller 时遇到问题, Description: Field todoService in com.springboot.todoCon
我有一个SpringBoot应用程序,它使用以下配置与PostgreSQL通信,通过AWS Beanstrik部署:。在我将AWS Aurora证书更新为rds-ca-ecc384-g1之前,一切都很
24年11月6日消息,阿里巴巴旗下的Java Excel工具库EasyExcel近日宣布,将停止更新,未来将逐步进入维护模式,将继续修复Bug,但不再主动新增功能。 EasyExcel 是一款知名的
@SpringBootApplication @SpringBootApplication看作是 @Configuration、@EnableAutoConfiguration、@Component
引入 先看SpringBoot的主配置类 @SpringBootApplication public class DemoApplication{ public static void m
雪花算法的唯一性,在单个节点中是可以保证的,对应kubernetes中的应用,如果是横向扩展后,进行多副本的情况下,可能出现重复的ID,这需要我们按着pod_name进行一个workId的生成,我还是
实在是不知道标题写什么了 可以在评论区给个建议哈哈哈哈 先用这个作为标题吧 尝试使用 国内给出的 AI 大模型做出一个 可以和 AI 对话的 网站出来 使用 智普AI 只能 在控制
一、介绍 在实际的软件系统开发过程中,由于业务的需求,在代码层面实现数据的脱敏还是远远不够的,往往还需要在数据库层面针对某些关键性的敏感信息,例如:身份证号、银行卡号、手机号、工资等信息进行加密存储
Selenium Selenium是一个用于Web应用程序自动化测试的开源工具套件。它主要用于以下目的: 浏览器自动化:Selenium能够模拟真实用户在不同浏览器(如Chrome、Fire
一、简介 在实际的项目开发过程中,经常需要用到邮件通知功能。例如,通过邮箱注册,邮箱找回密码,邮箱推送报表等等,实际的应用场景非常的多。 早期的时候,为了能实现邮件的自动发送功能,通常会使用 Ja
SpringBoot:基于redis自定义注解实现后端接口防重复提交校验 一、添加依赖 org.springframework.boot spring
SpringBoot:使用Jackson完成全局序列化配置 一、测试准备 com.fasterxml.jackson.core jackson-cor
springboot:整合rocketmq 一、简易消息操作 生产者整合mq 导入依赖 org.springframework.boot
springboot:常用注解 一、spring常用注解 包扫描+组件标注注解 @Component:泛指各种组件 @Controller、@Service、@Repository都可以称为@Comp
我们经常需要在两个系统之间进行一些数据的交互,这时候我们就需要开发数据交互接口。 一般来说,遇到比较多的接口有HTTP接口、WebService接口、FTP文件传输。今天我要来学习一下在SpringB
背景 近期项目上线,甲方要求通过安全检测才能进行验收,故针对扫描结果对系统进行了一系列的安全加固,本文对一些常见的安全问题及防护策略进行介绍,提供对应的解决方案 跨站脚本攻击 XSS常发生于论坛评论等
我是一名优秀的程序员,十分优秀!