springboot系列七: Lombok注解,Spring Initializr,yaml语法

news2024/11/25 11:45:32

老韩学生

  • Lombok
    • Lombok介绍
    • Lombok常用注解
    • Lombok应用实例
      • 代码实现
      • idea安装lombok插件
  • Spring Initializr
    • Spring Initializr介绍
    • Spring Initializr使用演示
      • 需求说明
      • 方式1: IDEA创建
      • 方式2: start.spring.io创建
    • 注意事项和说明
  • yaml语法
    • yaml介绍
    • 使用文档
    • yaml基本语法
    • 数据类型
      • 字面量
      • 对象
      • 数组
    • yaml应用实例
      • 需求图解
      • 代码实现
      • 注意事项和使用细节

在这里插入图片描述


⬅️ 上一篇: springboot系列六: springboot底层机制实现 下


🎉 欢迎来到 springboot系列七: Lombok注解,Spring Initializr,yaml语法 🎉

在本篇文章中,我们将探索 Lombok 注解的使用,Spring Initializr 的功能以及 yaml 语法的基本用法。这些工具和技术将帮助您更高效地开发 Spring Boot 应用程序。


🔧 本篇需要用到的项目: quickstart项目


Lombok

Lombok介绍

●Lombok介绍
1.简化JavaBean开发, 可以使用Lombok的注解让代码更加简洁. mybatis中学习过

2.Java项目中, 很多没有技术含量又必须存在的代码, POJO的getter/setter/toString;异常处理;I/O流的关闭操作等等,这些代码既没有技术含量,又影响着代码的美观,Lombok应运而生。

SpringBootIDEA官方支持
1.IDEA 2020已经内置了Lombok插件
2.SpringBoot 2.1.x之后的版本也在Starter中内置了Lombok依赖

Lombok常用注解

在这里插入图片描述

Lombok应用实例

代码实现

●需求说明
回到我们的 quickstart 项目, 使用Lombok简化Furn.java代码, 让代码简洁高效

1.在pom.xml中引入lombok
引入lombok, 版本在spring-boot-dependencies-2.5.3.pom已经指定了, 把光标放在lombok, ctrl+b 可以看到. springboot依赖管理

在这里插入图片描述

2.修改Furn.java, 使用Lombok注解简化代码. 提示: 可以通过idea自带的反编译功能, 看Furn.class的源代码

@Component
@ToString //编译时, 生成toString方法, 默认情况下, 会生成一个无参构造器
@ConfigurationProperties(prefix = "furn01")
public class Furn {
    private Integer id;
    private String name;
    private BigDecimal price;
}

在这里插入图片描述

3.@Data注解

@Component
@ConfigurationProperties(prefix = "furn01")
/**
 * 说明:
 * 1. Equivalent to {@code @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode}.
 * 2. @Data 注解等价使用了 如下注解
 * @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode
 * 3. @RequiredArgsConstructor, 单独地说一下
 */
@Data
public class Furn {
    private Integer id;
    private String name;
    private BigDecimal price;
}

编译后

在这里插入图片描述

4.@RequiredArgsConstructor详解
在我们写controller或者Service层的时候,需要注入很多的mapper接口或者另外的service接口,这时候就会写很多的@Autowired注解,代码看起来很乱
lombok提供了一个注解:

@RequiredArgsConstructor(onConstructor = @_(@Autowired))
写在类上可以代替@Autowired注解,需要注意的是在注入时需要用final定义,或者使用@notnull注解

在这里插入图片描述

5.@NoArgsConstructor详解

/**
 * 说明: @NoArgsConstructor 在编译时, 会生成无参构造器, 前面我们说过, 默认情况下, 会生成一个无参构造器
 * 说明: 当我们有其它构造器生成时, 如果你希望仍然有无参构造器, 就需要使用@NoArgsConstructor显示声明一下
 *      , 否则就会覆盖无参构造器, 从而造成代码错误
 */
//@NoArgsConstructor

/**
 * @allArgsConstructor 在编译时, 会生成全参构造器, 造成覆盖掉无参构造器, 项目启动, 报错
 * 解决方案一: 取消Furn作为Bean注入, 那么在需要自动装配Furn的位置, 通通注释掉
 * 解决方案二: 显式声明一下无参构造器, 可以手写, 也可以用@NoArgsConstructor
 */
@AllArgsConstructor
public class Furn {
    private Integer id;
    private String name;
    private BigDecimal price;
}

idea安装lombok插件

1.不装插件也可以使用基本的注解, 比如 @Data, @Getter 等.

2.但是不能使用其扩展功能, 比如 日志输出, 如意我们还是安装一下, 也比较简单.

在这里插入图片描述

3.演示使用Lombok支持日志输出(建议使用slf4j), 修改src/main/java/com/zzw/HiController.java

@RequestMapping("/furn")
@ResponseBody
public Furn furn() {
    //System.out.println("furn = " + furn);
    //使用slfj日志输出
    //普通方式
    log.info("furn-" + furn);
    //占位符方式输出
    log.info("furn={}, myfurn={}", furn, furn);
    return furn;
}

4.浏览器访问 http://localhost:8088/furn

前端显示

在这里插入图片描述

后端显示
2024-06-17 13:38:33.476 INFO 11584 — [nio-8088-exec-3] com.zzw.HiController : furn-Furn(id=100, name=家居, price=6000)
2024-06-17 13:38:33.476 INFO 11584 — [nio-8088-exec-3] com.zzw.HiController : furn=Furn(id=100, name=家居, price=6000), myfurn=Furn(id=100, name=家居, price=6000)

前提:
1.Furn实体类要有toString方法, 否则后端输出对象地址.
2.Furn实体类要有setter方法, 因为application.properties中的属性通过setter方法设置, 否则后端输出null.
3.Furn实体类要有getter方法, 因为furn.id furn.name是通过getId和getName方法获取的, 否则前端不输出JSON信息.

Spring Initializr

Spring Initializr介绍

●Spring Initializr作用
1.程序员通过Maven Archetype 来生成Maven项目, 项目原型相对简陋, 需要手动配置, 但是比较灵活.

2.通过Spring官方提供的Spring Initializr来构建Maven项目, 能完美支持IDEA和`Eclipse, 让程序员来选择需要的开发场景(starter), 还能自动生成启动类和单元测试代码.

3.Spring InitializrIdea 版本有要求, 同时还要走国外网络, 我们还是习惯使用Maven Archetype来生成Maven项目. 但是作为知识点, 还是要介绍一下.

Spring Initializr使用演示

需求说明

使用Spring Initializr创建SpringBoot项目, 并支持web应用场景, 支持MyBatis.

方式1: IDEA创建

1.创建项目
在这里插入图片描述

2.选择 Spring Initializr. 如果没有看到这个选项, 需要安装Spring Initializr插件

在这里插入图片描述

3.项目设置

在这里插入图片描述

4.选择需要的开发场景

在这里插入图片描述

5.项目创建好后, 自动生成启动类和单元测试代码

在这里插入图片描述

在这里插入图片描述

方式2: start.spring.io创建

https://start.spring.io/

在这里插入图片描述

注意事项和说明

1.如果通过Spring Initializr创建项目, pom.xml爆红

在这里插入图片描述

2.解决方案: 指定版本和当前的springboot一致, 刷新maven即可解决

在这里插入图片描述

yaml语法

yaml介绍

●基本说明
1.YAML是"YAML Ain’t Markup Language"(YAML不是一种标记语言)的递归缩写. 在开发这种语言时, YAML的意思其实是: “Yet Another Markup Language”(仍是一种标记语言), 是为了强调这种语言以数据作为中心, 而不是以标记语言为重点, 而用反向缩略语重命名. 百度百科

●解读
1.YAML 以数据作为中心, 而不是以标记语言为重点.
2.YAML 仍然是一种标记语言, 但是和传统的标记语言不一样, 是以数据为中心的标记语言.
3.YAML 非常适合用来做以数据为中心的配置文件 [springboot: application.yml]

使用文档

官方文档: https://yaml.org/

yaml for java: https://www.cnblogs.com/strongmore/p/14219180.html

yaml基本语法

1.形式为 key: value, 注意: 后面有空格

2.区分大小写:

3.使用缩进表示层级关系

4.缩进不允许使用tab, 只允许空格 [有些地方也是别tab, 推荐使用空格]

5.缩进的空格数不重要, 只要相同层级的元素左对齐即可

6.字符串无需加引号

7.yaml中, 注释使用 #

数据类型

字面量

1.字面量: 单个的, 不可再分的值. date, boolean, string, number, null

2.number可以表示整数, 浮点数.

3.保存形式为key: value

对象

1.对象: 键值对的集合, 比如map, hash, object

行内写法: k: {k1: v1, k2: v2, k3: v3}
monster: {id: 100, name: 牛魔王}

换行形式:
k:
  k1: v1
  k2: v2
  k3: v3

monster:
  id: 100
  name: 牛魔王
  skill: 芭蕉扇


2.举例说明
在这里插入图片描述

数组

1.数组: 一组按次序排列的值, 比如 array, list, set, queue

行内写法: k: [v1, v2, v3]
hobby: [打篮球, 踢足球, 打羽毛球]

换行形式:
k:
  - v1
  - v2
  - v3

hobby:
  - 打篮球
  - 踢足球
  - 打羽毛球


2.举例说明

在这里插入图片描述

yaml应用实例

需求图解

需求: 使用yaml配置文件 和 JavaBean 进行数据绑定, 体会 yaml 使用方式

1.创建项目 configuration, 完成yaml的使用

在这里插入图片描述
2.运行效果

在这里插入图片描述

代码实现

1.创建一个新的 SpringBoot 项目 configuration, 我们这里用灵活配置的方式创建.

在这里插入图片描述

2.在pom.xml引入lombok, 并切换一下springboot版本

<!--导入springboot父工程-规定写法-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.3</version>
</parent>

<dependencies>
    <!--导入web项目场景启动器, 会自动地导入和web开发相关的所有依赖[库/jar]-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--引入lombok, 使用版本仲裁-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
</dependencies>

3.创建src/main/java/com/zzw/springboot/bean/Car.java.
小细节: 创建的bean需要在SpringBootApplication包或者其子包, 否则默认不会被扫描, 同时也不能完全使用lombok的相关简化注解.

@Data
public class Car {
    private String name;
    private double price;
}

4.创建src/main/java/com/zzw/springboot/bean/Monster.java

@Component
@Data
public class Monster {
    private Integer id;
    private String name;
    private Integer age;
    private Boolean isMarried;
    private Date birth;
    private Car car;
    private String[] skill;
    private List<String> hobby;
    private Map<String, Object> wife;
    private Set<Double> salaries;
    private Map<String, List<Car>> cars;
}

5.创建src/main/java/com/zzw/springboot/controller/HiController.java

@RestController
public class HiController {

    @Autowired
    private Monster monster;

    @RequestMapping("/monster")
    public Monster monster() {
        return monster;
    }
}

6.创建src/main/java/com/zzw/springboot/Application.java

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

7.启动项目, 进行测试. 为空, 说明还没有对数据进行配置绑定.

在这里插入图片描述

8.创建src/main/resources/application.yml, 演示各种写法. 提示: 编写application.yml 时, 这些Bean的字段是可以通过安装插件或jar自动提示的, 后面会学到, 现在先苦后甜.

monster:
  id: 100
  name: 牛魔王
  age: 200
  isMarried: true
  birth: 2000/10/15

9.配置Furn. 参考properties的配置绑定

@ConfigurationProperties(prefix = "monster")
public class Monster {}

10.重启,测试

在这里插入图片描述

11.完成后面数据的绑定

monster:
  id: 100
  name: 牛魔王
  age: 200
  isMarried: true
  birth: 2000/10/15
  #对象
#  car: {name: 奔驰, price: 120000} #行内风格
  car:
    name: 奔驰
    price: 160000 #换行风格
  #数组
#  skill: [芭蕉扇, 七十二变, 刀枪不入] #行内风格
  skill:
    - 芭蕉扇~
    - 七十二变~
    - 刀枪不入~ #换行风格
  hobby:
    - 喝酒
    - 吃肉
    - 陪老婆 #换行风格
  #map-属于对象
#  wife: {no1: 铁扇公主, no2: 狐狸精} #行内风格
  wife:
    no1: 铁扇公主
    no2: 狐狸精 #换行风格
  #set-属于对象
#  salaries: [10000, 20000, 30000] #行内风格
  salaries:
    - 10000
    - 20000
    - 30000 #换行风格
  cars: # 因为cars k-v v是List<Car> 所以我们使用换行风格
    group1:
      - {name: 奔驰, price: 120000}
      -  name: 奥迪
         price: 130000
    group2:
      - {name: 宝马, price: 110000}
      -  name: 兰博基尼
         price: 300000

注意事项和使用细节

1.如果application.propertiesapplication.yml 有相同的前缀值绑定, 则application.properties优先级高, 开发时, 应当避免.

在这里插入图片描述

2.字符串无需加引号, 如果你用" " 或者 ’ ’ 包起来, 也可以.

在这里插入图片描述

3.解决yamlproperties配置文件, 不提示字段信息问题

1)如图, 我们可以知道, 在编写application.yaml文件时, 不提示Monster的字段信息, 非常不方便

2)在pom.xml加入spring-boot-configuration-processor依赖, 可以从quickstart项目拷贝.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <!--
        这里我们配置optional为true
        说明: 表示防止将此依赖传递到其它模块
    -->
    <optional>true</optional>
</dependency>

3)对application.yml文件编辑, 就会提示字段. 提示: 输入你在Bean中配置的prefix, 就会提示

在这里插入图片描述
在这里插入图片描述

4)提示: 如果还没有提示, 可以安装一个yaml插件来搞定.

在这里插入图片描述


🔜 下一篇预告: [即将更新,敬请期待]


📚 目录导航 📚

  1. springboot系列一: springboot初步入门
  2. springboot系列二: sprintboot依赖管理
  3. springboot系列三: sprintboot自动配置
  4. springboot系列四: sprintboot容器功能
  5. springboot系列五: springboot底层机制实现 上
  6. springboot系列六: springboot底层机制实现 下
  7. springboot系列七: Lombok注解,Spring Initializr,yaml语法

💬 读者互动 💬
在使用 Lombok 注解,Spring Initializr 和 yaml 语法的过程中,您有哪些体会或问题?欢迎在评论区留言,让我们一起讨论吧!😊


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

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

相关文章

酣客的“FFC模式”|白酒商业模式|分润制度顶层架构设计

酣客公社摒弃传统商业模式&#xff0c;提出“心联网”及“FFC模式”的商业模式。 坐标&#xff1a;厦门&#xff0c;我是肖琳 深耕社交新零售行业10年&#xff0c;主要提供新零售系统工具及顶层商业模式设计、全案策划运营陪跑等。 今天和大家分享“酣客”的营销模式&#xff…

leetcode 动态规划(基础版)单词拆分

题目&#xff1a; 题解&#xff1a; 一种可行的dp做法是基于完全背包问题&#xff0c;将s看成是一个背包&#xff0c;wordDict看作是物品&#xff0c;然后往s中放入物品判断最终是否可以变为给定的s即可。这道题和上一题都用到了在dp如何枚举连续子串和状态表示&#xff1a;枚…

JavaWeb——MySQL

目录 2. 数据库设计 3. 表的关系 4. 表关系的实现 5. 多表查询 5.1 内连接 &#xff08;1&#xff09;隐式内连接 &#xff08;2&#xff09;显式内连接 ​5.2 外连接 &#xff08;1&#xff09;左外连接 &#xff08;2&#xff09;右外连接 2. 数据库设计 数据库设…

Eureka 服务注册与发现

目录 前言 注册中心 CAP 理论 常⻅的注册中心 CAP理论对比 Eureka 搭建 Eureka Server 引⼊ eureka-server 依赖 完善启动类 编写配置⽂件 启动服务 服务注册 引⼊ eureka-client 依赖 完善配置⽂件 启动服务 服务发现 引⼊依赖 完善配置⽂件 远程调⽤ 启动…

光明致优尊耀呈现“柏林爱乐在上海”音乐会正式开幕,奏响盛夏狂热乐章

2024年6月26日&#xff0c;由光明致优尊耀呈现的中国上海国际艺术节特别项目“柏林爱乐在上海”音乐会正式开幕。暌违七年&#xff0c;世界顶级交响乐团——柏林爱乐乐团再度访沪&#xff0c;在首席指挥基里尔别特连科率领下&#xff0c;正式在中国上海国际艺术节登台演出&…

Zynq MPSoC / RFSoC 动态配置 DIMM DDR

目录 名词释义硬软件版本Zynq MPSoC / RFSoC 动态 DDR 配置简介具体操作方法PCW GUI 配置启用动态 DDR 配置功能I2C 硬件要求根据硬件修改 FSBL初始化 I2C 控制器选择 I2C Mux 的 Slave读取 EEPROM 的第一页读取 EEPROM 的第二页 调试参考文档 本文首发于 Josh Gao 的博客&…

自动化测试小技巧之Airtest-Selenium和Excel的无缝协作

一、前言 之前在问卷以及Q群上有同学有提出过能否将网页上的一些数据通过Airtest去导出生成一份Excel&#xff0c;那么我们今天一起讨论一下&#xff0c;我们应该如何去实现&#xff0c;以及当我们获取的数据类型不同的时候&#xff0c;获取的方式该怎么随之调整&#xff1f; …

实现在父盒子中点击生成子盒子并识别父盒子边界不溢出

效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</…

高级运维工程师讲述银河麒麟V10SP1服务器加固删除snmp服务引起keeplived莫名连带删除引起生产事故实战

高级运维工程师讲述银河麒麟V10SP1服务器加固删除snmp服务引起keeplived莫名连带删除引起生产事故实战 一、核实操作系统信息 uname -a Linux localhost.localdomain 4.19.90-23.8.v2101.ky10.x86_64 #1 SMP Mon May 17 17:08:34 CST 2021 x86_64 x86_64 x86_64 GNU/Linuxcat…

【AMBA】APB总线的个人学习记录(一):理论知识

精通APB (Advanced Peripheral Bus) 总线设计通常意味着你不仅理解其基础概念&#xff0c;而且能够在实际的硬件设计中灵活运用APB总线&#xff0c;解决复杂问题&#xff0c;并优化设计。以下是一些关键点&#xff0c;当你掌握这些方面时&#xff0c;可以说你对APB总线设计有了…

004-GeoGebra基础篇-GeoGebra的布局

注意&#xff0c;为保证大家的GeoGebra的学习顺利从基础、中级到高级的过度&#xff0c;本教程笔记有此要求&#xff1a; 必须使用英文版GeoGebra&#xff08;虽说GeoGebra也支持汉字写算式&#xff0c;但强烈不建议&#xff0c;因为一个英文翻译过来的中文真是五花八门&#…

网店管家婆与金蝶云星空对接集成往来单位查询接口打通客户新增

网店管家婆与金蝶云星空对接集成往来单位查询接口打通客户新增 对接系统网店管家婆 目前网上管家婆已服务超十万家海内外企业级用户&#xff0c;覆盖了服装配饰、食品酒水、数码3C、美妆日护、医疗保健、母婴用品、五金工具等等行业。 对接系统&#xff1a;金蝶云星空 金蝶K/3C…

如何高效管理TikTok账号?TK矩阵防关联测评养号引流系统揭秘

TK矩阵防关联测评自养号系统是为TikTok&#xff08;TK&#xff09;平台设计的&#xff0c;旨在帮助卖家实现多账号管理、防关联以及自动化测评和养号的功能。该系统通过一系列的技术手段和创新功能&#xff0c;为跨境电商运营者提供了强大的支持。 系统核心优势 1. 全球真实环…

5000字深入讲解:企业数字化转型优先从哪个板块开始?

很多企业都知道数字化转型重要&#xff0c;但不知道应该怎样入手&#xff0c;分哪些阶段。以下引用国内领先数字化服务商 织信Informat 的数字化转型方法论材料&#xff0c;且看看他们是如何看待数字化转型的&#xff1f;数字化转型应该从哪先开始&#xff1f;如何做&#xff1…

一个好玩的 AI 产品,一起来玩儿梗

欢迎贡献你的扎心梗图&#xff1a; - 万物皆可meme介绍&#xff1a;https://hqexj12b0g.feishu.cn/wiki/space/7385353047184375810 - 任何人都可以编辑的玩梗集&#xff1a;https://hqexj12b0g.feishu.cn/wiki/

Redis-Bitmap位图及其常用命令详解

1.Redis概述 2.Bitmap Bitmap 是 Redis 中的一种数据结构&#xff0c;用于表示位图&#xff08;bit array&#xff09;。 它通常用于处理大规模数据集中每个元素的状态&#xff0c;比如用户的在线/离线状态&#xff08;每个用户对应一个位&#xff0c;表示在线&#xff08;1&a…

【课程总结】Day12:YOLO的深入了解

前言 在【课程总结】Day11&#xff08;下&#xff09;&#xff1a;YOLO的入门使用一节中&#xff0c;我们已经了解YOLO的使用方法&#xff0c;使用过程非常简单&#xff0c;训练时只需要三行代码&#xff1a;引入YOLO&#xff0c;构建模型&#xff0c;训练模型&#xff1b;预测…

分类预测 | PSO-PNN基于粒子群算法优化概率神经网络的数据分类预测(Matlab)

分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别 目录 分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.PSO-PNN基于粒子群算法优化概率神经网络的数据…

SQLite:一个极简使用教程

SQLite是一个轻量级的、文件系统基础的数据库&#xff0c;它被设计为配置简单、易于部署。SQLite数据库存储在一个单一的磁盘文件中&#xff0c;这意味着数据库的创建和维护都非常简单。 1. SQLite特点 轻量级&#xff1a;SQLite不需要一个独立的服务器进程。它是一个嵌入式SQ…

Steam夏促遇到社区打不开、社区进不去的处理措施一览

在Steam夏促中&#xff0c;绝大部分Steam游戏都会有折扣优惠&#xff0c;包括一些3A大作在夏促中也会降价售卖&#xff0c;玩家可以低价购买到自己心仪的游戏。不少玩家进入Steam社区查看游戏评价时遇到社区打不开、社区进不去的情况&#xff0c;不知道怎么解决&#xff0c;下面…