Lombok-入门(效率开发)

文章目录

      • Lombok
        • 去Autowired注解
        • val
        • @NonNull-空值校验
        • @Cleanup-自动关闭资源
        • @Getter/@Setter
        • @ToString
        • @EqualsAndHashCode
        • @~Constructor-构造函数
        • @Data
        • @Value-不可变类
        • @Builder-使用建造者模式来创建对象
          • @Accessors(chain = true)-开启链式编程
          • @Accessors(fluent = true)-开启链式编程,省略给对象赋值和取值时候得set、get前缀
        • @SneakyThrows-自动抛出异常
        • @Synchronized-锁,线程安全同步访问
        • @With-对象克隆
        • @Getter(lazy=true)
        • @Log-直接生成日志对象
        • @Slf4j

Lombok

官方文档:
Stable — 稳定 (projectlombok.org)

  • 增强代码,省去常规代码,编译自动生产代码,提高开发效率。
<!--    lombok依赖        -->  
<dependency>  
    <groupId>org.projectlombok</groupId>  
    <artifactId>lombok</artifactId>  
    <version>1.18.20</version>  
</dependency>
去Autowired注解

Required Args Constructor 使用说明:
构造函数会自动调用。这样就可以方便地使用依赖注入功能,而不需要手动创建和装配bean
用组件测试:

@Component  
@RequiredArgsConstructor(onConstructor = @__(@Autowired))  
@SpringBootTest  
public class MyService {    
private final ArticleService articleService;  
    @Test  
    public void doSomething() {  
        List<Article> list = articleService.list();  
        System.out.println(JSON.toJSON(list));  
    }  
}

开发使用:
在ServiceImpl(实现业务逻辑)中

  • 自动生成一个包含所有非null属性字段的构造函数,并且在构造函数上添加@Autowired注解,以便Spring框架可以自动注入依赖。同时,由于这些注解都是编译时注解,因此它们的性能开销也非常小。
@Service  
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
val

val可以取代任意类型作为局部变量。

@Test  
public void cs1(){  
    // Lombok的val使用  
    val cs = new ArrayList<String>();  
    cs.add("1");  
    System.out.println(cs);  
    val cs1 = new HashMap<String,String>();  
    cs1.put("1","1");  
    System.out.println(cs1);  
}
@NonNull-空值校验

在方法上使用进行空值校验。

public NonNullTest(@NonNull String name) {  
    this.name = name;  
}
@Cleanup-自动关闭资源
@Test  
public void cs3() throws IOException {  
    // Lombok的@Cleanup使用  
    // 输入输出流,无需编写try catch和调用close()方法  
    String inStr = "Hello World!";  
    @Cleanup ByteArrayInputStream in = new ByteArrayInputStream(inStr.getBytes("UTF-8"));  
    @Cleanup ByteArrayOutputStream out = new ByteArrayOutputStream();  
    byte[] b = new byte[1024];  
    while (true) {  
        int r = in.read(b);  
        if (r == -1) break;  
        // 输入流  
        out.write(b, 0, r);  
    }  
    // 输出流  
    String outStr = out.toString("UTF-8");  
    System.out.println(outStr);  
}
@Getter/@Setter

生成getter/setter方法。

@ToString

生成toStrng方法。

@EqualsAndHashCode

生成equals,hashCode,便以比较二个对象。

@~Constructor-构造函数
  • @NoArgsConstructor:生成无参构造函数。
  • @RequiredArgsConstructor:生成包含必须参数的构造函数,使用@NonNull注解的类属性为必须参数。
  • @AllArgsConstructor:生成包含所有参数的构造函数。
@Data

@Data是一个方便使用的组合注解,是@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstructor的组合体。

@Value-不可变类

类无法被继承,属性无法被设置,只能使用全参构造器。

TestEntity testEntity = new TestEntity("@Value","3");
@Builder-使用建造者模式来创建对象

建造者模式+链式编程。

TestEntity build = TestEntity.builder()  
        .name("张三")  
        .age("18")  
        .build();  
System.out.println(build);
@Accessors(chain = true)-开启链式编程
@Data  
@Accessors(chain = true)  
public class TestEntity2 implements Serializable {  
    private String name;  
    private String age;  
    public static void main(String[] args) {  
        TestEntity2 testEntity2 = new TestEntity2();  
        testEntity2.setName("张三")  
               .setAge("18");  
        System.out.println(testEntity2);  
    }  
}
@Accessors(fluent = true)-开启链式编程,省略给对象赋值和取值时候得set、get前缀
@SneakyThrows-自动抛出异常
//自动抛出异常,无需处理  
//@SneakyThrows(UnsupportedEncodingException.class)  
@SneakyThrows  
public static byte[] str2byte(String str) {  
    return str.getBytes("UTF-8");  
}
@Synchronized-锁,线程安全同步访问
@Synchronized  
public static void sout(){  
    if (i>0){  
        i--;  
        System.out.println("i值为:"+i);  
    }  
}
@With-对象克隆

使用时需要指定全参构造方法。

@Getter(lazy=true)

当我们获取某一个属性比较消耗资源时,可以给@Getter添加lazy=true属性实现懒加载,会生成Double Check Lock 样板代码对属性进行懒加载。

public class GetterLazyExample {  
    @Getter(lazy = true)  
    private final double[] cached = expensive();  
  
    private double[] expensive() {  
        double[] result = new double[1000000];  
        for (int i = 0; i < result.length; i++) {  
            result[i] = Math.asin(i);  
        }  
        return result;  
    }  
  
    public static void main(String[] args) {  
        //使用Double Check Lock 样板代码对属性进行懒加载  
        GetterLazyExample example = new GetterLazyExample();  
        System.out.println(example.getCached().length);  
    }  
}
@Log-直接生成日志对象
@Log  
public class cs {  
    public static void main(String[] args) {  
        log.info("level info"); // 普通信息 
        log.warning("level warning");  // 警告
        log.severe("level severe");  // 严重警告!(错误)
    }  
}
@Slf4j

使用Lombok生成日志对象时,根据使用日志实现的不同,有多种注解可以使用。比如
@Log@Log4j@Log4j2@Slf4j等。

@Slf4j  
public class LogSlf4jExample {  
    public static void main(String[] args) {  
        log.info("level:{}","info");// 信息  
        log.warn("level:{}","warn");// 警告  
        log.error("level:{}", "error");// 错误  
    }  
}

![[Pasted image 20231220163624.png]]

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

工作流引擎的架构设计与对比

所谓工作流引擎是指 workflow 作为应用系统的一部分&#xff0c;并为之提供对各应用系统有决定作用的&#xff0c;根据角色、分工和条件的不同决定信息传递路由、内容等级 等核心解决方案。工作流引擎可以灵活地配置工作流程&#xff0c;并且可以自动化的根据配置进行状态变更和…

基于ssm生鲜配送系统设计及实现论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对生鲜配送信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差…

Floyd求最短路(Floyd算法)

参考&#xff1a;约会怎么走到目的地最近呢&#xff1f;一文讲清所有最短路算法问题-CSDN博客 有4个城市8条路&#xff0c;公路上的数字表示这条公路的长短&#xff0c;并且路是单向的&#xff0c;现在要求我们求出任意两个城市之间的最短路程&#xff0c;也就是求任意两个点之…

vscode颜色主题插件one dark Pro安装

1.点击扩展图标→搜索“one dark Pro”→第一个点击安装 2.安装成功后&#xff0c;不要忘了点击设置颜色主题 3.看下效果&#xff1a;

UCloud + 宝塔 + PHP = 个人网站

UCloud 宝塔 PHP 个人网站 文章目录 1.概要2.UCloud使用教程&#xff08;租用云端服务器&#xff09;3.宝塔使用教程&#xff08;免费服务器运维面板&#xff09;4.总结 1.概要 今天主要是想教大家如何将在网络上白嫖到源码&#xff08;特指PHP源码!!!&#xff09;搭建运行…

在mt4上怎么查看CHFJPY品种的合约细则?

在MetaTrader 4 (MT4) 上查看CHFJPY品种的合约细则的方法如下&#xff1a; FXCM福汇官方个人注册登录流程 1.打开MT4软件并登录到您的交易账户。 2.在MT4界面的"市场观察"窗格中&#xff0c;找到并右键单击"CHFJPY"货币对。如果您无法找到"市场观察…

AI毕业设计生成器(可生成java或python系统源码),使用Tensorflow训练的AI代码大模型

这是一个辅助生成计算机毕业设计的工具&#xff0c;可以自动完成毕业设计的源码。它基于几百个github上面开源的java和python项目&#xff0c;运用tengsorflow技术&#xff0c;训练出了AI大模型。基本实现了计算机毕业设计生成器&#xff0c;能够初步生成Java或python基本源码。…

CentOS7.9安装Mysql5.7-m14

简介 本文介绍了Linux CentOS系统下Mysql5.7-m14的下载和安装方法 环境 CentOS Linux release 7.9.2009 (Core) mysql Ver 14.14 Distrib 5.7.4-m14, for Linux (x86_64) using EditLine wrapper 正文 一、去官网下载mysql 5.7.4-m14 官网下载链接&#xff1a; https://d…

跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

在裸机系统中&#xff0c;系统的主体就是 C P U CPU CPU按照预先设定的程序逻辑在 m a i n main main函数里面顺序执行的无限循环。在多任务系统中&#xff0c;根据功能的不同&#xff0c;把整个系统分割成一个个独立的&#xff0c;无限循环且不能返回的的函数&#xff0c;这个…

公众号商务合作投放怎么做,公众号商务合作流程!

微信公众号已经成为企业品牌推广、产品宣传的重要渠道。企业通过公众号进行商务合作投放广告&#xff0c;引爆产品流量&#xff0c;投放的公众号要有一定的粉丝基础&#xff0c;投放出去产生一定的投放效果。 本文伯乐网络传媒将为您详细介绍公众号商务合作投放的流程及注意事…

计算机硬件系统设计——运算器设计

计算机硬件系统设计——运算器设计 文章目录 计算机硬件系统设计——运算器设计8位可控加减法器2位加法器&#xff1a;3位加法器&#xff1a;串行进位加法器&#xff08;把n个全加器相连得到的n位加法器&#xff09; 4位先行进位电路74182并行进位加法器 4位快速加法器16位快速…

力扣日记12.19-【二叉树篇】二叉搜索树中的搜索

力扣日记&#xff1a;【二叉树篇】二叉搜索树中的搜索 日期&#xff1a;2023.12.19 参考&#xff1a;代码随想录、力扣 700. 二叉搜索树中的搜索 题目描述 难度&#xff1a;简单 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和一个整数值 val。 你需要在 BST 中…

CloudPulse:一款针对AWS云环境的SSL证书搜索与分析引擎

关于CloudPulse CloudPulse是一款针对AWS云环境的SSL证书搜索与分析引擎&#xff0c;广大研究人员可以使用该工具简化并增强针对SSL证书数据的检索和分析过程。 在网络侦查阶段&#xff0c;我们往往需要收集与目标相关的信息&#xff0c;并为目标创建一个专用文档&#xff0c…

解决win10下强制设置web浏览器为microsoft edge的方法

目录 问题场景实现方法禁止edge默认选项设置默认浏览器 反思 问题场景 因为一些特殊的原因&#xff0c;我需要第二个浏览器&#xff0c;我的第一个浏览器是google的chrome浏览器&#xff0c;所以我选择的是windows的默认浏览器&#xff0c;就是microsoft edge浏览器&#xff0…

SpringBoot actuator应用监控

文章目录 引入依赖端点(Endpoints)端点种类端点开启配置暴露端点手动暴露端点 端点保护引入spring security依赖配置security 端点响应缓存访问端点路径修改CORS跨域支持健康信息(/actuator/health)自定义healthInfo 应用信息(/actuator/info) 监控信息可视化引入依赖配置查看配…

fastadmin自定义添加、修改弹窗大小

找到对应的js文件&#xff0c;添加&#xff1a; // 修改添加窗口的大小 $(".btn-add").data("area", ["50%", "60%"]); // 修改编辑窗口的大小 $(".btn-edit").data("area", ["50%", "60%"]…

2024Web自动化测试的技术框架和工具有哪些?

Web 自动化测试是一种自动化测试方式&#xff0c;旨在模拟人工操作对 Web 应用程序进行测试。这种测试方式可以提高测试效率和测试精度&#xff0c;减少人工测试的工作量和测试成本。在 Web 自动化测试中&#xff0c;技术框架和工具起着至关重要的作用。本文将介绍几种常见的 W…

数据库面试题

数据库面试题 Mysql Q&#xff1a;数据库索引有哪些&#xff1f;有什么作用以及优缺点&#xff1f; 普通索引 alter table table_name add index index_name (column) MySQL中基本索引类型&#xff0c;没有什么限制&#xff0c;允许在定义索引的列中插入重复值和空值&…

Swagger升级指南:Swagger2与Swagger3注解差异揭秘

在API开发的世界里&#xff0c;Swagger已经成为了一个不可或缺的工具&#xff0c;它让API的文档化和前后端的协作变得前所未有地简单。随着Swagger的进化&#xff0c;我们迎来了Swagger3&#xff0c;也被称为OpenAPI Specification 3.0。本篇博客将带大家深入了解Swagger2和Swa…

Swagger不显示接口注释

如果 Swagger 不显示接口注释&#xff0c;请检查以下两点&#xff1a; 1、缺少 XML 注释文件&#xff1a;Swagger 默认使用 XML 注释文件中的注释来生成接口文档。确保在项目的生成设置中启用了 XML 文档生成&#xff0c;并将生成的 XML 注释文件放置在与生成的 DLL 文件相同的…