学习Spring Boot:(十五)使用Lombok来优雅的编码

前言

Lombok 是一种 Java? 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注解实现这一目的。

正文

添加依赖

在 pom.xml 文件中添加相关依赖:

<lombok.version>1.16.20</lombok.version><!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><scope>provided</scope></dependency>

安装插件

由于 Lombok 采取的注解形式的,在编译后,自动生成相应的方法,为了不让 ide 疯了,需要下载插件了支持它。
以 idea 为例:查找插件 lombok plugin 安装即可。

用我的 User 实体类为例(set,get,toString 方法),

@Getter
@Setter
@ToString
public class SysUserEntity implements Serializable

在按快捷键 Ctrl + F12,可以查找到set,get,toString 方法。

注解

写点常用的,其余的 api 的打开 Jar 包一目了然

@Getter
@Setter
@ToString
@EqualsAndHashCode
构造函数
@AllArgsConstructor

会生成一个包含所有变量,同时如果变量使用了NotNull annotation , 会进行是否为空的校验,
全部参数的构造函数的自动生成,该注解的作用域也是只有在实体类上,参数的顺序与属性定义的顺序一致。

@NoArgsConstructor

无参构造函数

@RequiredArgsConstructor

会生成一个包含常量(final),和标识了@NotNull的变量 的构造方法。

怎么使用

它们都有三个参数可以设置

1.String staticName() default "";

如果设置了它,将原来的构造方法的访问修饰符将会变成 私有的,而外添加一个静态构造方法,参数相同,名字是设置的字符串的名字,访问修饰符为公有的。

  1. AnyAnnotation[] onConstructor() default {};
    在构造方法上添加注解。使用方法@RequiredArgsConstructor(onConstructor=@__({@AnnotationsGoHere}))}

    例如我们在 Spring 项目中需要注入多个值,写很多个 @Autowired 很麻烦,就可以使用这种方式:

    @Service
    @RequiredArgsConstructor(onConstructor = @__(@Autowired))
    public class UserServiceImpl implements IUserService {private final IUserRepository userRepository;private final IOrderRepository orderRepository;………………
    
  2. AccessLevel access() default lombok.AccessLevel.PUBLIC;
    构造函数访问修饰符;

  3. @NoArgsConstructor无参构造函数中还有个注解 boolean force() default false;
    作者的注释是 If {@code true}, initializes all final fields to 0 / null / false. Otherwise, a compile time error occurs.

    设置为 true 的时候,初始化所有的参数为默认值,否则编译错误。

@Data

我自己尝试了下,我们使用 @Data 注解就可以有下面几个注解的功能: @ToString@Getter@Setter@EqualsAndHashCode@NoArgsConstructor

注意的是,同时使用@Data@AllArgsConstructor 后 ,默认的无参构造函数失效,如果需要它,要重新设置 @NoArgsConstructor

@Slf4j
//类上面注解了,直接调用 log 即可:
log.info(xxxx);
@Log

使用的是 java.util.logging.Logger ,直接使用 变量 log

@Builder

bulder 模式构建对象。

@Cleanup
@Cleanup 
InputStream in = new FileInputStream(args[0]);
@Cleanup 
OutputStream out = new FileOutputStream(args[1]);

自动化关闭流,相当于 jdk1.7 种的 try with resource

val

类型推导。

 val example = new ArrayList<String>();example.add("Hello, World!");

对应的转换后代码就是:

 val example = new ArrayList<String>();example.add("Hello, World!");
@NonNull
public NonNullExample(@NonNull Person person) {this.name = person.getName();}

转换后就是:

public NonNullExample(@NonNull Person person) {if (person == null) {throw new NullPointerException("person");}this.name = person.getName();}
@SneakyThrows

翻译就是暗中抛出异常

当我们需要抛出异常,在当前方法上调用,不用显示的在方法名后面写 throw

@SneakyThrows(Exception.class)
@Synchronized

方法中所有的代码都加入到一个代码块中,默认静态方法使用的是全局锁,普通方法使用的是对象锁,当然也可以指定锁的对象。

private final Object lock = new Object();
@Synchronized("lock")
public void foo() {// Do something
}

个人认为这样的阅读起来比较麻烦,实际开发中往往将 synchronized 颗粒化到代码块中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 品尝饮料,java细节经典题型

28. 选项中哪一行代码可以替换题目中//add code here 而不产生编译错误?() [java] view plaincopy 1. public abstract class MyClass { 2. 3. 4. 5.......Java 基础试题 一:选择题(1*3030) (题目写在答题纸上面) 1:Java 提供哪几种运算符多选 ( abcd )。 A)算术运算符 B)位运…

学习Spring Boot:(十六)使用Shiro与JWT 实现认证服务

前言 代码可以参考 需要把Web应用做成无状态的&#xff0c;即服务器端无状态&#xff0c;就是说服务器端不会存储像会话这种东西&#xff0c;而是每次请求时access_token进行资源访问。这里我们将使用 JWT 1&#xff0c;基于散列的消息认证码&#xff0c;使用一个密钥和一个消…

java泛型和注解,泛型 · 注解和泛型 · 看云

[TOC]# 泛型## 为什么要使用泛型在之前学过的集合框架中&#xff0c;List和Map都使用了泛型技术来确认其内容的数据类型。如果不使用泛型&#xff0c;在程序运行阶段&#xff0c;会带来数据类型转型的错误风险。~~~List list new ArrayList();list.add("tom");for (…

java程序单引号报错,javapoigetInpuStream报错br/是这样的, 爱问知识人

是这样的&#xff0c;我写了重载了两个getInputStream方法&#xff0c;当调用不带参数的方法时&#xff0c;运行正常&#xff0c;当调用带参的方法则报 Can not find a java.io.InputStream with the name [inputStream] in是这样的&#xff0c;我写了重载了两个getInputStream…

学习Spring Boot:(十七)Spring Boot 中使用 Redis

前言 Redis是一个由Salvatore Sanfilippo写的key-value存储系统。 edis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 通常被称为数据结构服务器&#xff0c;因为值&#xff08;va…

jqueryd登录异步请求 java,ajaxd的js和jquery实现

先来看一下javascript的。var httpxml;httpxml new XMLHttpRequest();httpxml.onreadystatechangefunction(){ //当服务器响应就绪时执行函数(就是说服务器准备好了你可以发请求了)if(httpxml.status 200 && httpxml.readyState 4){//这里200和4代表响应的状态&…

学习Spring Boot:(十八)Spring Boot 中session共享

前言 前面我们将 Redis 集成到工程中来了&#xff0c;现在需要用它来做点实事了。这次为了解决分布式系统中的 session 共享的问题&#xff0c;将 session 托管到 Redis。 正文 引入依赖 除了上篇文章中引入 spring-boot-starter-data-redis&#xff0c;还需要 spring-sess…

matlab 码元扩展,扩频通信及matlab仿真

扩展频谱通信以及直接扩频的matlab仿真号无关)扩展频谱后成为宽频带信号&#xff0c;然后再进行传输的一种系统。待传输的基带信号就是信源发出的数字信号。特定的扩频函数通常选用各种伪随机序列(扩频码)&#xff0c;其码元传输速率远大于基带信号速率&#xff0c;因而和基带信…

学习Spring Boot:(十九)Shiro 中使用缓存

前言 在 shiro 中每次去拦截请求进行权限认证的时候&#xff0c;都会去数据库查询该用户的所有权限信息&#xff0c; 这个时候就是有一个问题了&#xff0c;因为用户的权限信息在短时间内是不可变的&#xff0c;每次查询出来的数据其实都是重复数据&#xff0c;没必要每次都去…

matlab安装无效距离过远,求助matlab的远程序

求助matlab的远程序function varargout a1(varargin)% A1 M-file for a1.fig% A1, by itself, creates a new A1 or raises the existing% singleton*.%% H A1 returns the handle to a new A1 or the handle to% the existing singleton*.%% A1(CALLBACK,hObject,eventData,…

学习Spring Boot:(二十)使用 MongoDB

前言 MongoDB&#xff08;来自于英文单词“Humongous”&#xff0c;中文含义为“庞大” &#xff09;是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoD…

php 事件调度,PHP单元测试调度事件

如何在函数调用期间测试事件是否被调度&#xff1f;public function updateUser() {//Do some update stuff$event new UserUpdated($user);$event->attach([new SendEmailAddressChangeEmail($emailAddress),new SendEmailAddressChangeEmail($oldEmailAddress),]);$event…

学习Spring Boot:(二十一)使用 EhCache 实现数据缓存

前言 当多次查询数据库影响到系统性能的时候&#xff0c;可以考虑使用缓存&#xff0c;来解决数据访问新能的问题。 SpringBoot 已经为我们提供了自动配置多个 CacheManager 的实现&#xff0c;只要去实现使用它就可以了。 一般的系统都是优先使用 EhCache&#xff0c;它工作…

php如何解决报错,php 启动报错如何解决_PHP教程

复制代码 代码如下:[rootabc lnmp]# service php-fpm startStarting php-fpm eAccelerator: Could not allocate 67108864 bytes, the maximum size the kernel allows is 33554432 bytes. Lower the amount of memory request or increase the limit in /proc/sys/kernel/shmm…

学习Spring Boot:(二十二)使用 AOP

前言 AOP&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。基于AOP实现的功能不会破坏原来程序逻辑&#xff0c;因此它可以很好的对业务逻辑的各个部分进行隔离&#xff0c;从而使得业务逻辑各部分之间的…

matlab怎么求hadamard,hadamard matlab

3、图像Hadamard变换 数字图像处理 ? Matlab没有提供图像Hadamard变换功能,不过 提供了求Hadamard变换矩阵的功能。例如使用 命令hadamard(8)能够得到下面[8 8]的......(A) 1.0000 命令 hadamard 矩阵 函数 hadamard 格式 H hadamard(n) 例 1-15 >> hhadamard(4) h 1 1…

学习Spring Boot:(二十三)Spring Boot 中使用 Docker

前言 简单的学习下怎么在 Spring Boot 中使用 Docker 进行构建&#xff0c;发布一个镜像&#xff0c;现在我们通过远程的 docker api 构建镜像&#xff0c;运行容器&#xff0c;发布镜像等操作。 这里只介绍两种方式&#xff1a; 远程命令 api &#xff08;需要知道 Docker …

nginx php大文件上传,Nginx+PHP上传大文件设置

nginx的修改send_timeout 60;fastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;client_max_body_size 30m; 可以全局设置也可以每个网站单独设置php的修改upload_max_filesize 10Mpost_max_size 15M 该项应该要大于 upload_max_filesizemax_inp…

学习Spring Boot:(二十四)多数据源配置与使用

前言 随着业务量增大&#xff0c;可能有些业务不是放在同一个数据库中&#xff0c;所以系统有需求使用多个数据库完成业务需求&#xff0c;我们需要配置多个数据源&#xff0c;从而进行操作不同数据库中数据。 正文 JdbcTemplate 多数据源 配置 需要在 Spring Boot 中配置…

matlab 超限像素平滑法,matlab超限像素平滑法_图像增强技术.ppt

主讲&#xff1a;苏菡 susuhansicnu.edu.cn 图象增强技术概述 目标&#xff1a;“视觉”效果更好&#xff0c;图象保真度不是首要目标 方法&#xff1a; 空间域增强&#xff1a;直接处理图象的象素 频率域增强&#xff1a;修改图象的傅立叶变换 评价&#xff1a;高度主观 视觉解…