前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >第二十九章:基于SpringBoot平台使用Lombok来优雅的编码

第二十九章:基于SpringBoot平台使用Lombok来优雅的编码

作者头像
恒宇少年
发布于 2018-06-27 07:48:42
发布于 2018-06-27 07:48:42
62000
代码可运行
举报
运行总次数:0
代码可运行

Lombok对于Java偷懒开发者来说应该是比较中意的,恰恰笔者就是一个喜欢在小细节上偷懒来提高开发效率的人。所以在技术框架的海洋里寻找了很久才在GitHub开源平台上找到,而在这之前国外很多程序猿一直使用该框架了,Lombok框架提供了很多编码遍历,但是也降低了代码的阅读力。下面我们看看在Idea开发工具中该怎么使用Lombok

本章目标

使用Lombok提高开发效率。

SpringBoot 企业级核心技术学习专题

专题

专题名称

专题描述

001

Spring Boot 核心技术

讲解SpringBoot一些企业级层面的核心组件

002

Spring Boot 核心技术章节源码

Spring Boot 核心技术简书每一篇文章码云对应源码

003

Spring Cloud 核心技术

对Spring Cloud核心技术全面讲解

004

Spring Cloud 核心技术章节源码

Spring Cloud 核心技术简书每一篇文章对应源码

005

QueryDSL 核心技术

全面讲解QueryDSL核心技术以及基于SpringBoot整合SpringDataJPA

006

SpringDataJPA 核心技术

全面讲解SpringDataJPA核心技术

构建项目

本章的项目不涉及数据访问,所以添加的依赖也比较少,pom.xml配置文件如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.yuqiyu</groupId>
    <artifactId>chapter29</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>chapter29</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!--web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--lombok依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

lombok的依赖仅仅只有一个,lombok基于配置在编译class文件时会自动将指定模板的内容写入。

创建实体

为了方便演示lombok的神奇之处,我们简单创建一个用户实体,基于该实体进行配置lombok注解,实体代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.yuqiyu.chapter29.bean;

/**
 * 用户实体>>>测试lombok
 * ========================
 * Created with IntelliJ IDEA.
 * User:恒宇少年
 * Date:2017/8/4
 * Time:23:07
 * 码云:http://git.oschina.net/jnyqy
 * ========================
 */
public class UserBean
{
    //名称
    private String name;
    //年龄
    private int age;
    //家庭住址
    private String address;
}

下面我们先来看看我们最常用的getter/setter基于lombok如何使用。

Getter/Setter

Getter/Setter注解作用域可以是实体类也可以是具体的属性字段,下面我们仅仅对name属性添加注解,代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //...省略
    //名称
    @Getter
    @Setter
    private String name;

如果想让lombok生效我们还需要针对idea工具进行插件的安装,下面我们按照顺序打开Idea配置File > Settings > Plugins > Browse repositories... > 输入lombok,插件就会被自动检索出来,界面如下图1所示:

图1

我的工具已经安装了该插件,所有在右侧是没有任何按钮的,如果你的工具没有安装该插件,右侧会有一个绿色的按钮,按钮的内容则是Install,点击安装后重启Idea就可以了。 为了方便我们直接使用SpringBoot项目为我们创建的测试类(位置:com.yuqiyu.chapter29.Chapter29ApplicationTests)来验证我们的lombok注解是否已经生效,测试类代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.yuqiyu.chapter29;

import com.yuqiyu.chapter29.bean.UserBean;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

@RunWith(JUnit4.class)
//@RunWith(SpringRunner.class)
//@SpringBootTest
public class Chapter29ApplicationTests {

    @Test
    public void testLombok()
    {
        //测试Getter/Setter
        UserBean user = new UserBean();
        user.setName("测试lombok");
        System.out.println(user.getName());
    }
}

可以看到我们可以正常使用name属性的getter/setter方法,但是其他属性的却是无法调用,下面我们修改注解Getter/Setter位置,配置到实体类上。修改后的代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//省略...
@Getter
@Setter
public class UserBean
{
    //名称
    private String name;
    //年龄
    private int age;
    //家庭住址
    private String address;
}

我们再来测试下其他属性是否可以访问到了,测试类修改代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//省略...
@Test
    public void testLombok()
    {
        //测试Getter/Setter
        UserBean user = new UserBean();
        user.setName("测试lombok");
        user.setAge(10);
        user.setAddress("测试地址");

        System.out.println(user.getName()+"  " + user.getAge() +"  "+user.getAddress());
    }

可以看到我们修改配置位置后UserBean实体内的所有属性都具备了Getter/Setter方法,这样我们在开发中就不需要再去做多余的生成操作了。

注意:如果你的属性Getter/Setter需要做特殊处理,那么直接使用原始方法实现即可,Lombok检查到存在自定义的方法后不会再做生成处理。

ToString

除了上述的Getter/SetterLombok还为我们提供了自动生成toString方法的注解@ToString,该注解的作用域仅仅是在实体类上,我们修改实体类添加该注解,在测试类中调用toString方法查看输出内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
System.out.println(user.toString());
//输出:
UserBean(name=测试lombok, age=10, address=sss测试地址)

Lombok自动创建的toString方法会将所有的属性都包含并且调用后可以输出。

AllArgsConstructor

Lombok还提供了全部参数的构造函数的自动生成,该注解的作用域也是只有在实体类上,因为只有实体类才会存在构造函数。修改添加该注解并且测试调用,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UserBean u = new UserBean("构造lombok",1,"测试地址");
//输出:
UserBean(name=构造lombok, age=1, address=sss测试地址)

注意:该注解配置后会自动生成一个具体全部参数的构造函数,参数的顺序与属性定义的顺序一致。

NoArgsConstructor

当然除了全部参数的构造函数,Lombok还提供了没有参数的构造函数,使用方式与@AllArgsConstructor一致。

到这里也许你就有疑问了,我为了一个类添加这么多注解麻烦吗?还不如工具生成getter/setter来的快呢,那好Lombok针对这个问题也做出了解决方案。

Data

我们使用@Data注解就可以涵盖@ToString@Getter@Setter方法,当然我们使用构造函数时还是需要单独添加注解,下面我们修改实体类添加@Data注解代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*@Getter
@Setter
@ToString*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserBean
{
    //名称
    private String name;
    //年龄
    private int age;
    //家庭住址
    private String address;

    public String getAddress() {
        return "sss"+address;
    }
}

我们将@ToString@Getter@Setter三个注解注释掉后添加@Data,按照官方所说这时我们的测试类应该不会出现任何的异常,我们打开测试类查看是否正常。 查看后果然,没有出现任何的异常,这也说明了@Data注解确实涵盖了上面三个注解。

Slf4j

还有一个利器,Lombok为我们内置了各种日志组件的支持,我们在SpringBoot项目开发中几乎都是使用logback作为日志组件,而logback是基于slf4j完成的。所以我们在实体类上直接添加@Slf4j就可以自动创建一个日志对象作为类内全局字段,自动创建的代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(Chapter29ApplicationTests.class);

为了测试我在Chapter29ApplicationTests测试类上添加了@Slf4j,调用效果如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//调用:
log.info(u.toString());
//输出:
23:55:46.100 [main] INFO com.yuqiyu.chapter29.Chapter29ApplicationTests - UserBean(name=构造lombok, age=1, address=sss测试地址)

总结

以上内容就是本章的全部讲述,本章主要讲解Lombok用于便于开发的注解组件。Lombok虽然提供的组件不多,但是每一个都是我们需要的,正是因为如此从而大大减少了我们的工作量,尤其是这种不起眼却又不得不写的代码。Lombok官方文档地址

本章代码已经上传到码云: SpringBoot配套源码地址:https://gitee.com/hengboy/spring-boot-chapter SpringCloud配套源码地址:https://gitee.com/hengboy/spring-cloud-chapter SpringBoot相关系列文章请访问:目录:SpringBoot学习目录 QueryDSL相关系列文章请访问:QueryDSL通用查询框架学习目录 SpringDataJPA相关系列文章请访问:目录:SpringDataJPA学习目录 感谢阅读!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.08.05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Altair HyperWorks 2020:一站式工程仿真解决方案 安装步骤
Altair HyperWorks 2020是一款集成了工程仿真、优化和多物理场分析等功能的软件。它能够快速有效地解决各种复杂的工程问题,为工程师和设计人员提供高端的工程仿真和分析工具,帮助用户优化设计和提高产品性能和质量。
用户10313071
2023/04/07
5760
Altair HyperWorks 2020:一站式工程仿真解决方案 安装步骤
边缘智能+AI赋能:创想智控金属增材制造熔池在线质量监控
在航空航天、能源装备等高端制造领域,金属增材制造技术凭借其高精度、低热影响和复杂结构成形的优势,成为推动先进制造升级的关键力量。熔池状态作为影响成型质量的核心因素,其稳定性和一致性直接决定着最终零件的性能表现。如何实现对熔池的实时感知、精准分析与智能判断,成为业内关注的重点。
创想智控
2025/04/29
1250
边缘智能+AI赋能:创想智控金属增材制造熔池在线质量监控
拓扑优化在结构设计中的应用
拓扑优化(Topology optimization)是基于有限元技术、数值分析与优化理论,在满足给定的约束条件下,寻找设计域内最优材料分布,进而实现表征结构性能指标的目标函数(如刚度、强度、重量等)达到最优,在航空航天、材料工程、化学工程等领域具有广泛的应用。很久之前Nature的一篇文章(Giga-voxel computational morphogenesis for structural design)采用拓扑优化算法对机翼结构进行优化设计,巧合的是其优化结果表明:在一定的边界条件下,最优的结果(刚度最大)与鸟类翅膀骨骼具有相似性。
联远智维
2022/01/20
1.6K0
拓扑优化在结构设计中的应用
钱塘号丨3D打印十大趋势预测
导读:我国的3D打印技术与世界先进水平基本同步,但产业化仍处于起步阶段。未来,3D打印将朝着速度更快、精度更高、性能更优、质量更可靠的方向发展,成为一股强大的科技力量。 近年来,借着新一轮科技革命和
钱塘数据
2018/03/02
7200
钱塘号丨3D打印十大趋势预测
技术 | 我国自主研发航空新材料,实现铝中“自生”陶瓷
上交大研究团队研发新型材料,并与多家企业合作搭建生产应用平台,极大推进我国航空航天材料的发展和落地。 近日,上海交通大学材料科学与工程学院王浩伟教授团队研究出超强纳米陶瓷铝合金,其强度和比刚度甚至超过“太空金属”钛合金,有助于将航空航天、高铁等领域带入更轻、更节能的新材料时代。 如表所示,伴随着实际应用的需求,航天航空的材料发展逐步向轻质、高强度逼近。目前,航空航天结构材料主要有铝合金、钛合金、纤维复合材料和高温结构材料。 在航空航天器机体结构材料的应用上,近100年来,铝合金都一直长盛不衰。特别是20世纪
镁客网
2018/05/30
6820
钱塘号丨3D打印技术对于供应链结构的影响
供应链管理的目的是将原始材料转变为部件或装配,最后将最终产品传递到消费者手上。但3D打印的兴起或许会使供应链理念和结构发生变革。因为3D打印蕴含着很多优化企业的战略资源的潜能,尤其在供应链结构上有一定的影响作用。接下来,小编就和大家一起探讨3D打印技术在供应链结构中到底有着怎样的影响? 从供应链的视角看3D打印技术的主要价值 通过Gartner(2016 年3月)调查得知,65%的供应链专业人士正在使用或者将在未来两年内投资于3D 打印技术。具体来说:目前正在使用或试用3D 打印技术的占26% 计划在两年
钱塘数据
2018/03/02
7810
钱塘号丨3D打印技术对于供应链结构的影响
企业仿真软件选型指南:从通用工具到有限元分析的全流程解析
在工程设计的数字化浪潮下,仿真技术已成为企业突破创新瓶颈的 “秘密武器”。通过模拟产品在真实工况下的性能表现,企业不仅能提前规避设计缺陷,还能将研发周期缩短 30% 以上,大幅降低试错成本。然而,机械制造、航空航天、汽车工业等不同领域,对仿真软件的精度、功能模块及计算效率有着截然不同的需求。例如,航空航天领域需要精确模拟极端环境下的材料力学特性,而汽车行业更注重碰撞模拟的实时性与多物理场耦合能力。这种差异化需求,让有限元分析(FEA)软件的选型成为决定研发成败的关键一环。接下来,我们将深入剖析各行业的仿真痛点,并探讨 Abaqus 为何能成为众多工程师信赖的全能型解决方案。
思茂信息
2025/06/05
290
企业仿真软件选型指南:从通用工具到有限元分析的全流程解析
系统仿真明知道“算不准”,但为什么还是研发设计不可缺少的重要一环
我们研究工程问题本来就是一种近似求解,而系统仿真在其中扮演的是一个风险预测的角色,本质上属于数值计算,必然存在计算误差、截断误差、机器误差等,它不像求解算术问题1+1=2这种,必须要得到一个精确值。
用户9925864
2024/07/12
2290
系统仿真明知道“算不准”,但为什么还是研发设计不可缺少的重要一环
《智启新材:人工智能重塑分子结构设计蓝图》
在当今科技飞速发展的时代,新材料的研发宛如一场激烈的竞赛,而人工智能(AI)作为一匹黑马,正以前所未有的速度和力量驰骋于这片赛场,为新材料的分子结构设计带来了革命性的突破,成为推动行业发展的关键力量,也因此成为科研与产业领域炙手可热的焦点话题。
程序员阿伟
2025/01/02
1020
《中国制造2025》告诉你未来投什么会火
主要涉及,集成电路及专用装备、信息通信设备以及操作系统和工业软件。不断丰富知识产权IP核和设计工具,突破关系国家信息与网络安全及电子整机产业发展的核心通用芯片,提升国产芯片的应用适配能力。掌握高密度封装及3D打印技术,提升封装产业和测试的自主发展能力,形成关键制造装备供货能力。 掌握新型计算、高速互联、先进存储、体系化安全保障等核心技术,全面突破第五代移动通信5G技术、核心路由交换技术、超高速大容量智能光传输技术、“未来网络”核心技术和体系架构,积极推动量子计算、神经网络等发展。 突破智能设计与仿真及其工具、制造物联与服务、工业大数据处理等高端工业软件核心技术,开发自主可控的高端工业平台软件和重点领域应用软件,建立完善工业软件集成标准与安全测评体系。推进自主工业软件体系化发展和产业化应用。
IT阅读排行榜
2018/08/14
4520
Sora再显大模型魔力,CAE也要老将焕新生
在数字经济浪潮汹涌而来的今天,CAE(Computer Aided Engineering,指计算机辅助工程)作为一项成熟的技术领域,正在焕发出全新的生命力。
数据猿
2024/03/04
1730
Sora再显大模型魔力,CAE也要老将焕新生
冬奥会闭幕!盘一盘国内高校在冬奥会上的「黑科技」应用,你的母校上榜了吗?
来源 | 吴文俊人工智能科学技术奖 历时半个月的北京冬奥会即将落幕! 申冬奥成功以来,「科技冬奥」重点攻关大力推进,《科技冬奥(2022)行动计划》全面展开,国家重点研发计划「科技冬奥」重点专项有序推进,取得了一系列科技创新成果。这其中自然少不了高校的力量。 据不完全统计,清华大学、浙江大学、复旦大学、上海交通大学、哈尔滨工业大学、北京航空航天大学、重庆大学、大连理工大学、北京林业大学、东北大学等多所国内高校贡献了科技智慧,助力冬奥。 1 浙江大学 织就炫酷的「冰丝带」 作为唯一新建冰上竞赛场馆——国家
AI科技评论
2022/03/03
2950
人工智能在航空航天领域的应用
航空航天领域是技术高度密集的行业,随着科技的不断进步,人工智能(AI)在该领域的应用也愈发广泛。AI技术不仅提升了航空航天器的设计和制造效率,还改善了飞行安全性和任务执行能力。本文将深入探讨人工智能在航空航天中的应用,包括具体的案例分析和相关代码示例。
知孤云出岫
2024/07/26
7980
人工智能在航空航天领域的应用
达索系统软件Abaqus如何实现多场耦合?
在现代工程领域,随着技术的飞速发展,各类工程问题的复杂性日益增加,传统的单一物理场分析已难以满足对实际工程现象的精确描述需求。在此背景下,耦合问题,特别是多场耦合问题逐渐成为工程分析的核心研究方向。多场耦合分析致力于在同一模型体系内,同时考量多个物理场之间的相互作用关系,像热场与结构场的交互影响,或是流体场与结构场的动态耦合,都是其典型的研究范畴。​
思茂信息
2025/05/28
1180
达索系统软件Abaqus如何实现多场耦合?
DC电源模块的设计与制造技术创新
1. 高效率设计:传统的DC电源模块存在能量转换损耗较大的问题,技术创新可通过采用高效率的电路拓扑结构、使用高性能的功率开关器件和优化控制算法等手段来提高能量转换效率,降低能量损耗。
河北稳控科技
2023/12/15
2090
DC电源模块的设计与制造技术创新
北航联合哈佛,历时四年,克服三大难题,研制出吸盘式仿生机器人 | 黑科技
该研究具有广泛的应用前景,如在国防科技,水下救援、海洋生态检测等领域,都可发挥重要的作用。 21日,《科学》杂志发表了一篇关于仿生机器人的论文,该论文详细描述了以䲟鱼软体吸盘为原理的仿生机器人。据悉,该机器人由北京航空航天大学和哈佛大学的研究人员共同研制,其中北京航空航天大学为该研究的第一单位和第一通讯单位。 启发 䲟鱼,又名吸盘鱼,喜欢吸附在鲨鱼、海龟等大型海洋生物身上,俗名免费旅行家。由于该鱼的游泳能力较差,所以它主要依靠头部的吸盘吸附在游泳能力强的大型鲨鱼或海兽的腹面,有时吸附于船底,以借此被带到饵料
镁客网
2018/05/30
4923
《智启新材热学性能优化之路:人工智能的神奇力量》
在当今科技飞速发展的时代,材料科学与人工智能的融合正成为创新的前沿阵地。其中,利用人工智能优化材料的热学性能,为众多领域的突破带来了新的曙光,从航空航天的高效热防护到电子设备的散热管理,其影响深远且广泛,无疑是当下极具热度的话题。
程序员阿伟
2025/01/02
1230
一文读懂,Abaqus软件的发展历程
在现代工程领域,有限元分析技术占据着举足轻重的地位,至今已历经五十余年的发展。将时间拨回到 20 世纪 50 年代,美国航空航天局(NASA)因太空探索任务的需要,率先对这项技术展开深入研究,促使有限元分析技术萌芽并逐步发展壮大。
思茂信息
2025/05/06
1570
一文读懂,Abaqus软件的发展历程
基于OptiStruct的碳纤维复合材料覆盖接头设计优化
随着国家对汽车排放量要求的提高以及新能源汽车的快速发展,降低油耗、提升续航里程的需求促使轻量化成为目前汽车产业的重要发展趋势。白车身作为汽车的主要承载结构,由于其可设计性强、减重空间大,是各大厂商轻量化开发的重点。国际上目前主要采用车身轻量化系数作为轻量化设计的评价指标,轻量化系数越低则表示车身的轻量化设计越好,计算方法如下式:
技术客
2022/05/17
1.1K0
为什么说仿真软件是新型科技?
在工程技术的领域中,有一种被称为有限元的方法,它可以让我们对复杂的问题进行仿真,分析其性质和特性,从而有效地解决各种问题。本文主要介绍了有限元分析技术在各种工程领域中的应用情况。
思茂信息
2025/02/21
900
为什么说仿真软件是新型科技?
推荐阅读
相关推荐
Altair HyperWorks 2020:一站式工程仿真解决方案 安装步骤
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档