《Spring Boot 趣味实战课》读书笔记(二)
牛刀小试——五分钟入门 Spring Boot
万物皆可 Hello World
创建一个 Web 工程
- 填写项目信息

- 选择依赖

- 从 IDEA 打开下载好的 Spring Boot 工程:

完成核心代码
- 创建 HelloController 类并编写 hello 方法
- 创建一个 HelloController 类,或者选择 File→New→Java Class 菜单命令来创建。
- 在 HelloController 类中添加一个 hello 方法:
@RestController public class HelloController {@GetMapping("/hello")public String hello() {return "Hello Spring Boot";} }
运行并查看效果
- 经过以上步骤,我们的第一个 Spring Boot 程序就全部完成了。
- 接下来需要验证一下这个程序是否可以正常运行。
- 项目启动成功后,可以在 Intellij IDEA 的控制台看到如下日志:

- 接下来在浏览器中访问 http://localhost:8080/hello:

Spring Boot 的工程结构
结构详解
- Spring Boot 之所以使用 Maven 的工程结构,是因为它们都遵循“约定优于配置”的设计哲学。
- 工程根目录由 4 部分组成:
- target(目录)
- 使用 Maven 打包后会将编译后的 .class 文件和依赖的 Jar 包,以及一些资源文件放到这个目录下。
- gitignore(文件)
- gitignore 文件用来配置那些不需要 Git 帮助我们进行版本控制的文件或目录,例如,Intellij IDEA 产生的配置文件或者本地开发使用的 application-local.yml 文件等。
- pom.xml(文件)
- pom.xml 文件用来配置依赖的 Jar 包,帮助我们进行 Jar 包管理。我们会经常跟它打交道。
- src(目录)
- src 目录用来存放所有我们编写的 Java 源码文件、程序配置文件、资源文件等,是开发需要用到的主目录。
- target(目录)
- 工程根目录由 4 部分组成:
结构分类
- 功能目录
- target、gitignore 和 pom.xml 都是偏工具属性的,主要是给 Maven、Git 用的,与开发人员的关系没有那么紧密。
- 我们可以将其称为功能目录(文件)。
- 业务目录
- 真正跟开发人员息息相关的是 src 目录下的内容。
- 我们可以清晰地看到,src 目录有两个分支——main和test。
- main 用来存放业务逻辑主代码,而 test 则用来存放测试代码。
- 理论上讲,main 中的每一个 Java 类(POJO 类除外)在 test 中都有一个测试类,可以理解成 main 中的每个类都有一个“贴身侍卫”,用来护其周全。
- 再往下看,又分为 dao、service、controller 等目录,这体现了软件开发中最基本的分层思想,对应着数据层、业务逻辑层及 Web 控制层。
珍爱生命,我用 Starters
什么是 Starters
- Starters 是一组方便的依赖描述。
- 你可以将其添加到你的应用中,将会得到 Spring 及相关技术的一站式服务,使你不必再将那些样板代码进行反复的复制、粘贴操作。
- Starters 其实就是将一组具有相关性的 Jar 包做了一个整合。
- 不同的 Starters 对应不同的功能。
- spring-boot-starter-web 用于 Web 工程;
- spring-boot-starter-test 用于单元测试;
- spring-boot-starter-mail 用于邮件服务;
- spring-boot-starter-data-redis 用于 Redis。
- Starters 按照功能把相关的依赖整合起来,不需要开发者自己手动添加,大大提高了开发效率。
- 从程序运行机制来说,使用 Starters 和自己手动添加 Jar 包依赖并没有任何不同。
- Spring 将这些基础设施整合好,让用户可以直接拿过来用,从而专注于自己的需求,这样才是好的产品。
值得拥有的 YAML
- YAML(YAML Ain’t Markup Language)是专门用来编写配置文件的,其设计宗旨是方便人类阅读与书写。
- Properties 用来编写配置文件已经非常简单了,但是它有一个缺点,就是结构不够清晰,不能体现配置项的相关性和层次。
- YAML 相较于其他配置文件的常用格式(如 XML、Properties、JSON 等),它的结构更加简洁与清晰。
- Spring Boot 默认使用 Properties 作为配置文件格式,需要手动将 application.properties 重命名为 application.yml。
YAML 语法
- 基本规则
- 大小写敏感;
- 使用空格缩进表示层级关系;
- 对缩进的空格数目没有要求,只要同级元素左侧对齐即可;
- 使用#注释,只有行注释,没有块注释;
- key 与 value 用英文冒号加上空格来分割。
- 基本组件
- 对象(映射/字典);
- 数组(列表)。
- 数据类型
- 字符串;
- 布尔值;
- 数值(整型、浮点);
- null;
- 日期/时间(Date、Time)。
相关文章:
《Spring Boot 趣味实战课》读书笔记(二)
牛刀小试——五分钟入门 Spring Boot 万物皆可 Hello World 创建一个 Web 工程 填写项目信息 选择依赖 从 IDEA 打开下载好的 Spring Boot 工程: 完成核心代码 创建 HelloController 类并编写 hello 方法 创建一个 HelloController 类,或者选择 Fi…...
Spring Cloud -- GateWay
为什么需要网关在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样的话会产生很多问题,例…...
【C语言】memcpy , memset等内存操作函数使用方法与注意事项
这个章节,我们探讨C语言内存操作函数。 重点介绍处理内存操作函数使用和注意事项 和内存函数如何模拟实现。 内存函数所需头文件 #include<string.h> 文章目录memcpymemcpy 函数模拟实现memmovememmove 函数模拟实现memcmpmemcmp 函数模拟实现memsetmemset 函…...
尚融宝04-mybatis-plus插件和条件构造器
目录 一、分页插件 1、添加配置类 2、添加分页插件 3、测试分页 二、XML自定义分页 1、UserMapper中定义接口方法 2、定义XML 3、测试 三、乐观锁 1、场景 2、乐观锁方案 3、乐观锁实现流程 4、优化流程 四、wapper介绍 1、Wrapper家族 2、创建测试类 五、Qu…...
面试重难点问题(C++)
持续更新!!!!! 网络部分 1.问,四次挥手的过程,和双方状态变化? 挥手这前,两边都是established状态,客户端发起断开请求,向服务器发送fin请求&…...
androidx.appcompat 升级到1.5.1 趟过的坑
APP 要上google play,Android SDK 版本要升级到32;接了一个第三方SDK,不巧的是这个SDK引用appcompat是1.5.1,顺手把appcompat 包升级到1.5.1,这草率的一升,带来的不止一地鸡毛,还有精神上被残忍…...
[C++]反向迭代器
目录 前言: 1 对反向迭代器的构造思想 2 实现反向迭代器 3 完整代码 前言: 本篇文章主要介绍了STL容器当中的反向迭代器,可能有朋友会说:“反向迭代器有什么好学的?不一样还是迭代器吗,我正向能写出来&…...
解析Python编程中的包结构
假设你想设计一个模块集(也就是一个“包”)来统一处理声音文件和声音数据。通常由它们的扩展有不同的声音格式,例如:WAV,AIFF,AU),所以你可能需要创建和维护一个不断增长的各种文件格…...
【前端】深入浅出缓存原理
缓存的基本原理 对于前端来说,缓存主要分为浏览器缓存(比如 localStorage、sessionStorage、cookie等等)以及http缓存,也是本文主要讲述的。 当然叫法也不一样,比如客户端缓存大概包括浏览器缓存和http缓存 所谓htt…...
单调栈图文详解(附Java模板)
🍏🍐🍊🍑🍒🍓🫐🥑🍋🍉🥝 啥是"单调栈",它能解决什么样的问题? 文章目录🦩单调栈的概念&a…...
彻底理解Session、Cookie、Token,入门及实战
文章目录Session Cookie的使用Token的使用Session Cookie的使用 1. Session存储数据 HttpSession session request.getSession(); //Servlet底层通过的SESSIONID,获取Session对象。 session.setAttribute("loginTime",new Date()); out.println(&q…...
为什么运营商大数据可以精准获客?
“获客难”,“获客成本高”,一直是困扰企业的大问题,身边的许多朋友在吐槽客户的意向度不高,总是无法成交,员工非常积极主动去跟踪客户了,但始终事倍功半,这就像是老人们常说的一句老话“热脸贴…...
【数据结构】栈的实现
💯💯💯 本篇主要利用数组来实现栈,对于栈的各种操作都作详细介绍,压栈,出栈以及获取栈中元素的操作都是学习栈的必备知识,快来学起来吧!!!©Ⅰ.栈的概念及…...
【链表OJ题(六)】链表分割
📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:数据结构 🎯长路漫漫浩浩,万事皆有期待 文章目录链表OJ题(六)1. 链表…...
C++类中的三大函数(构造,析构,拷贝)
下面一段话与大家共勉:每个人的一生都会遇到很多边界,有些边界可以突破,有些则不能。那些无法突破的边界就是你的极限,而划分边界的标准就是“阈值”。每次突破阈值之后,人生轨迹就会发生剧烈变化,其间需要…...
【2024考研】计算机考研,4轮复习时间安排
文章目录🎨第1轮复习(暑假前&系统课)英语1/2数学1/2专业课408🎨第2轮复习(开学前&真题)英语1/2试卷数学1/2试卷专业课408试卷🎨第3轮复习(报名前&政治)政治试…...
(十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
系列文章: python网络爬虫专栏 目录 序言 本节学习目标 特别申明 4.7 使用BeautfulSoup解析h...
【经验】项目管理:瀑布式、Scrum
1、瀑布式开发 流程关键词关键人员输出立项简述、周期、预算领导立项申请表、立项评审表策划计划项目经理、QA、CM各种计划书(项目、配置、测试等),评审需求功能项目经理功能列表、需求规格书、需求开发计划等,评审设计UML开发设…...
Learning C++ No.17【STL No.7】双端队列
引言: 北京时间:2023/3/17/7:18,刚刚快乐的早锻炼回来(不对 ,应该说回来有一会了),因为此时我已经吃完早饭,洗过澡了;现在回想起上学期,就算是第二天需要晨跑…...
Snackbar
1.简介 位于底部的提示View 支持侧滑消失 同一时间只有一个 不支持跨Activity展示 国内使用率很低 2.基础使用 2.1 基本展示 Snackbar.make(view, "Content", Snackbar.LENGTH_LONG).show()2.2 设置点击事件 注意不设置点击事件回调,点击按钮的文字不…...
千问3.5-2B博物馆导览:展品图理解、说明牌OCR与个性化讲解生成
千问3.5-2B博物馆导览:展品图理解、说明牌OCR与个性化讲解生成 1. 博物馆导览新体验 想象一下,当你站在博物馆的展品前,只需用手机拍下展品照片,就能立即获得专业的讲解内容、展品背景故事,甚至还能根据你的兴趣偏好…...
Allegro PCB设计必备:3分钟搞定带钻孔数据的DXF文件导出(附常见错误排查)
Allegro PCB设计实战:高效导出带钻孔数据的DXF文件全攻略 在PCB设计领域,Allegro作为行业标杆工具,其文件输出质量直接关系到生产制造的准确性。特别是当设计需要与其他CAD系统协作或提交给PCB制造商时,DXF文件的完整性至关重要。…...
SDMatte效果对比评测:与传统抠图工具及在线API的全面比拼
SDMatte效果对比评测:与传统抠图工具及在线API的全面比拼 1. 开篇:为什么需要新的抠图方案 在数字内容创作领域,抠图一直是个让人又爱又恨的技术活。记得去年帮朋友做电商产品图,光是给20个商品抠图就花了我整整一个周末。传统工…...
【架构实战】健康检查与故障转移机制
一、为什么需要健康检查 在分布式系统中,服务实例可能因为各种原因变得不可用,而调用方却毫不知情,继续向故障实例发送请求,导致大量失败。常见的服务不可用场景:- 进程假死:Java进程存在但无法响应请求&am…...
在MATLAB中调用与可视化Lingbot-Depth-Pretrain-ViTL-14的深度估计结果
在MATLAB中调用与可视化Lingbot-Depth-Pretrain-ViTL-14的深度估计结果 对于很多从事计算机视觉、机器人或者测绘相关研究的工程师和学者来说,深度估计是一个基础又关键的任务。它能从一张普通的二维图片中,推测出每个像素点距离相机的远近,…...
初识Git,带你深入学习Git相关的知识
在之前的博客中,我都会在博客的开头放一个gitee的链接。Gitee是什么呢?它是一个远程的代码托管库。在我们学习和项目管理的时候起着非常重要的作用。 本期我就带领着大家一起学习Git相关的知识内容。学习它的操作,了解其在企业级开发中的作用…...
实战-EdgeBoard赛事卡:从零部署飞桨模型到智能车竞赛
1. EdgeBoard赛事卡开箱与环境准备 第一次拿到EdgeBoard赛事专用卡时,这块巴掌大的小盒子让我有点怀疑——这么小的板子真能跑动智能车竞赛需要的视觉模型吗?拆开包装后发现,除了板卡本体,配件只有一根Type-C线,确实符…...
在GCP上运行autoresearch
Andrej Karpathy最近开源了autoresearch,这是一个将真实LLM训练环境交给AI代理并让它自主实验的项目。代理修改模型代码,训练恰好5分钟,检查验证损失是否改善,保留或丢弃更改,然后重复。你去睡觉;醒来时会看…...
运放跟随器:电路设计中最容易被低估的‘保镖‘(隔离驱动全解析)
运放跟随器:电路设计中最容易被低估的"保镖"(隔离&驱动全解析) 在硬件工程师的日常设计中,运放跟随器常常被视为一个"可有可无"的组件——毕竟它的电压增益仅为1,看起来似乎只是将输入信号原封…...
3种革命性技术突破:解放城通网盘下载速度的终极方案
3种革命性技术突破:解放城通网盘下载速度的终极方案 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否曾经面对城通网盘那令人绝望的下载速度而束手无策?当急需获取重要文件…...
