当前位置: 首页 > news >正文

SpringBoot-核心技术篇

技术掌握导图

在这里插入图片描述

六个大标题↓

  • 配置文件
  • web开发
  • 数据访问
  • 单元测试
  • 指标指控
  • 原理解析

配置文件

1.文件类型

1.1、properties

同以前的properties用法

1.2、yaml

1.2.1、简介

YAML是 “YAML Ain`t Markup Language”(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML的意思其实是: “Yet Another Markup Language”(仍是一种标记语言)。
非常适合用来做以数据为中心的配置文件

1.2.2、基本语法

  • key:value; kv之间有空格
  • 大小写敏感
  • 使用缩写表示层级关系
  • 缩进不允许使用tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释
  • ''与""表示字符串内容 会被 转义/不转义

1.2.3、数据类型

  • 字面量:单个的、不可再分的值。date、boolean、string、number、null
k: v
  • 对象:键值对的集合。map、hash、set、object
行内写法: k: {k1:v1,k2:v2,k3:v3}
#或
k :k1: v1k2: v2k3: v3
  • 数组:一组按次序排列的值。array、list、queue
行内写法: k: [v1,v2,v3]
#或者
k:- v1- v2- v3

码笔的,如果有报错下面情况的,可以这样解决:

Error:(3, 51) java: 无法访问
org.springframework.boot.context.properties.Configura
tionProperties   错误的类文件: /D:/maven-
repo/org/springframework/boot/spring-
boot/3.0.4/spring-boot-3.0.4.jar!/org/spr

上面意思可能就是SpringBoot或Java的版本太高了,我们可以修改Maven设置和POM文件来解决↓
在这里插入图片描述
在这里插入图片描述

    <modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.atguigu.boot</groupId><artifactId>boot-01-helloworld-2</artifactId><version>0.0.1-SNAPSHOT</version><name>boot-01-helloworld-2</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties>

回到正题,下面是Yaml的语法和使用展示
yaml文件内容↓
创建的方式则是直接新建一个File就行,输入application.yaml。
而SpringBoot的application.properties也是

person:userName: zhangsanboss: truebirth: 2019/12/9age: 18
#  interests: [唱,跳,篮球,music]interests:--- 篮球- musicanimal: [奔驰,宝马,奥迪]
#  score:
#    english: 80
#    math: 90#下面是json的表达方式,可以不k: v 直接k:vscore: {english: 80,math: 90}salaries:- 6000.22- 9999.99pet:name: 奔驰weight: 15000.00allPets:sick:- {name: 宝马,weight: 12000.00}- name: 奥迪weight: 10000.00- name: 凯迪拉克weight: 8000.00health:- {name: 雪铁龙,weight: 100.00}- {name: C6,weight: 120000.00}

运行结果↓
在这里插入图片描述

控制器的代码↓

@RestController
public class HelloController {@Autowired//自动注入Person person;@RequestMapping("/person")public Person person(){return this.person;}
}

我们的POJO类用到了Lombok插件,该插件就是自动写set、get、toString等方法,构造器需要自己手动写注解才有,在IDEA中可以点击文件结构来查看Lombok编译时产生的这些自动方法的实体↓
记得给POJO类加上配置属性,前缀:person

Person类也都用,就是有点长,此处不截图了。
在这里插入图片描述

POJO类:Person代码↓

//有人说 @Data注解包含了@ToString
//@ToString
@ConfigurationProperties(prefix = "person")//和配置文件中前缀为person的属性绑定值
//注册为容器中的组件
@Component
//lombok标记(get+set+hashCode+toString+equals...)
@Data
public class Person {private String userName;private Boolean boss;private Date birth;private Integer age;private Pet pet;private String[] interests;private List<String> animal;private Map<String,Object>score;private Set<Double>salaries;//哼哼 salary 复数 -> 先把y变i 然后加esprivate Map<String,List<Pet>>allPets;}

POJO类:Pet类代码↓

@Data
public class Pet {private String name;private Double weight;
}

IDEA确实帮助我们自动空格了,注意 k: v,这里的v和冒号是有一个空格的,在Yaml语法中不能使用Tab缩进,所以在其他编辑软件中要小心点,IDEA真的我哭死。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
注意上面的红字是错误的,必须k: v有空格!
在这里插入图片描述
map没有加空格的错误形式!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意空格产生的层级关系!
配置优先级
在这里插入图片描述
字符串的语法
不管是直接 张三;还是’张三’;还是"张三"。
它们表示的都是字符串,效果一致。
而带引号的意义是,它是否要转义特殊字符
比如:

userName: zhangsan \n 李四

双引号效果:
在这里插入图片描述
单引号效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
双引号在控制台中是转义,在网页上是不转义的
单引号在控制台中不转义,在网页上是专一的
只是展示效果而已。
在这里插入图片描述

自定义类绑定的配置提示

我们发现,在Yaml文件的编写中,自己定义的内容没有提示,而SpringBoot的内容就有提示,我们要怎么做才能让自定义的类绑定的配置也有提示呢?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
导入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>

刷新POM文件后,重启一下项目,然后下次书写自定义Yaml文件时,就有提示信息了。
如果重启项目仍然没有提示,那么就去clean一下Maven,然后重启项目,然后再尝试,应该就可以了(本人就是这么解决的)
在这里插入图片描述
在这里插入图片描述
我们可以看到,提示的不是userName,而是user-name,为什么不是驼峰了?
其实这里的-就代表是驼峰,相当于 -name 等于 Name

开发小提示\技巧
在这里插入图片描述

<configuration><excludes><exclude><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId></exclude></excludes>
</configuration>

Web开发

Web开发的技术导图

在这里插入图片描述

新建SpringBoot项目

我们使用Spring Initializr来快速创建SpringBoot应用
在这里插入图片描述
①项目信息配置
在这里插入图片描述
②依睐框选
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
③项目配置修改

<version>2.3.4.RELEASE</version>

在这里插入图片描述

在这里插入图片描述
缺少src/main/java|resources目录
缺少主程序类

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

resources里缺少核心配置文件properteis

application.properties

缺少src/main/test/java目录

网页根目录:

http://localhost:8080/

静态资源规则与定制化

2、简单功能分析

2.1、静态资源访问

1、静态资源目录

类路径下:called/static or /public or /resources or /META-INF/resources

访问:当前项目根路径/ + 静态资源名
在这里插入图片描述

我们可以随意静态资源放入到这几个文件夹里,下面是演示↓
在这里插入图片描述

在这里插入图片描述
设问:如果我们的控制器处理的请求和静态资源的名称一样,那应该怎么响应处理呢?
在这里插入图片描述
在这里插入图片描述
原理是:静态映射 /** 。
请求先去找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。静态资源去在这里插入图片描述
目录,按照名字取找。如果静态资源没找到,则会是404↓
在这里插入图片描述

2、静态资源访问前缀

默认无前缀。
通过yaml配置文件增加前缀↓
在这里插入图片描述设置静态资源的访问前缀

spring:mvc:static-path-pattern: /res/**

在这里插入图片描述
测试增加前缀后的静态资源访问↓
原来的路径访问情况:
在这里插入图片描述
增加前缀访问的情况:
在这里插入图片描述
通过配置修该静态资源默认的访问位置↓

spring:mvc:static-path-pattern: /res/**resources:static-locations: [classpath:/haha/]

在这里插入图片描述

3、webjar(了解)

在这里插入图片描述

welcome与favicon功能

2.2、欢迎页支持

  • 静态资源路径下 index.html

    • 可以配置静态资源路径
    • 但是不可以配置静态资源的访问前缀。否则导致index.html不能被默认访问
  • controller能处理/index

在默认的情况下,访问根目录会取访问静态目录下的index.html欢迎页↓
注意这里吧先前设置的静态路径和前缀都注释掉了
在这里插入图片描述

在这里插入图片描述
配置默认静态资源目录的路径
在这里插入图片描述

2.3、自定义Favicon

设置网站图标
在这里插入图片描述
注销掉先前的配置,并且在浏览器中清理浏览器的缓存。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Web开发场景-源码分析

静态资源原理

  • SpringBoot启动默认加载xxxAutoConfiguration类(自动配置类)
  • SpringMVC功能的自动配置类 WebMvcAutoConfiguration,生效

在这里插入图片描述

  • 给容器中配了什么。

在这里插入图片描述

  • 配置文件的相关属性和xxx进行了绑定。 WebMvcProperties==spring.mvc、ResourceProperties==spring.resources

配置类只有一个有参构造器
有参构造器所有参数的值都会从容器中确定

//ResourceProperties resourceProperties:获取和spring.resources绑定的所有的值的对象
//WebMvcProperties spring.mvc获取和spring.resource绑定的所有的值的对象
//ListableBeanFactory beanFactory Spring的beanFactory
//HttpMessageConverters:找到所有的HttpMessageConverters
//ResourceHandLerRegistrationCustomizer 找到资源处理器的自定义器
//DispatcherServletPath
//ServletRegistrationBean 给应用注册Servlet、Filter...

在这里插入图片描述
资源处理的默认规则
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
webjars的规则
在这里插入图片描述
静态资源路径的默认值
在这里插入图片描述
欢迎页的处理规则

HandlerMapping:处理器映射。保存了每一个Handler能处理哪些请求。

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

Rest映射及源码分析

3、请求参数处理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Rest原理(表单提交要使用REST的时候)

  • 表单提交会带上_method=PUT

  • 请求过来会被HiddenHttpMethodFilter拦截
    在这里插入图片描述
    在这里插入图片描述
    该方法是获得请求参数,此处获取在这里插入图片描述
    _method请求参数

  • 判断请求是否正常,并且是POST方式

    • 获取_method参数的值
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      下面是允许的请求名称的集合↓如果里面包含就去重新包装一个request请求对象。
      在这里插入图片描述
      在这里插入图片描述
      上面可以看到,只有POST方法才会去判断是否是PUT或DELETE请求,否则就是GET,这也是为什么直接写PUT或DELETE请求类型,但是结果却是GET类型的原因。
      控制层的注解
      在这里插入图片描述
      派生注解
      在这里插入图片描述
      在这里插入图片描述

P27

相关文章:

SpringBoot-核心技术篇

技术掌握导图 六个大标题↓ 配置文件web开发数据访问单元测试指标指控原理解析 配置文件 1.文件类型 1.1、properties 同以前的properties用法 1.2、yaml 1.2.1、简介 YAML是 “YAML Aint Markup Language”&#xff08;YAML不是一种标记语言&#xff09;的递归缩写。在…...

2023还有人不知道kubernetes?| 初步理解kubernetes

文章目录Kubernetes(K8s)一、Openstack&VM1、**认识虚拟化****1.1**、什么是虚拟化**1.2、虚拟化分类**2、OpenStack与KVM、VMWare2.1、OpenStack2.2、KVM2.3、VMWare二、容器&编排技术1、容器发展史1.1、Chroot1.2、FreeBSD Jails1.3、Solaris Zones1.4、LXC1.5、Dock…...

Docker 环境搭建

RabbitMq 安装与启动安装&#xff1a;运行命令&#xff1a;docker pull rabbitmq 默认版本是&#xff1a;latest启动rabbitmq&#xff1a;运行命令&#xff1a;docker run \ # 运行-e RABBITMQ_DETAULT_USERroot \ # 设置用户名-e RABBITMQ_DETAULT_PASS123456 \ # 设置 密码--…...

css实现炫酷充电动画

先绘制一个电池&#xff0c;电池头部和电池的身体 这里其实就是两个div&#xff0c;使用z-index改变层级&#xff0c;电池的身体盖住头部&#xff0c;圆角使用border-radius完成 html部分,完整的css部分在最后 <div class"chargerBox"><div class"ch…...

【Effective C++详细总结】第二章 构造/析构/赋值运算

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;C/C知识点 &#x1f4e3;专栏定位&#xff1a;整理一下 C 相关的知识点&#xff0c;供大家学习参考~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;…...

webpack基础

webpack基础 webpack基础目录webpack基础前言Webpack 是什么&#xff1f;Webpack 有什么用&#xff1f;一、webpack的基本使用webpack如何使用文件和文件夹创建创建文件下载依赖二、基本配置5 大核心概念准备 Webpack 配置文件修改配置文件处理样式资源处理图片资源修改输出资源…...

jQuery《一篇搞定》

今日内容 一、JQuery 零、 复习昨日 1 写出至少15个标签 2 写出至少7个css属性font-size,color,font-familytext-algin,background-color,background-image,background-sizewidth,heighttop,bottom ,left ,rightpositionfloatbordermarginpadding 3 写出input标签的type的不…...

Spring Cloud学习笔记【负载均衡-Ribbon】

文章目录什么是Spring Cloud RibbonLB&#xff08;负载均衡&#xff09;是什么Ribbon本地负载均衡客户端 VS Nginx服务端负载均衡区别&#xff1f;Ribbon架构工作流程Ribbon Demo搭建IRule规则Ribbon负载均衡轮询算法的原理配置自定义IRule新建MyRuleConfig配置类启动类添加Rib…...

第九章:C语言数据结构与算法初阶之堆

系列文章目录 文章目录系列文章目录前言一、堆的定义二、堆的实现三、堆的接口函数1、初始化2、销毁3、插入4、删除5、判空6、元素个数四、堆排序1、建堆2、排序五、堆的应用——TOPK1、什么是TOPK问题&#xff1f;2、解决方法总结前言 堆就是完全二叉树。 一、堆的定义 我们…...

Mysql架构初识

&#x1f972; &#x1f978; &#x1f90c; &#x1fac0; &#x1fac1; &#x1f977; &#x1f43b;‍❄️&#x1f9a4; &#x1fab6; &#x1f9ad; &#x1fab2; &#x1fab3; &#x1fab0; &#x1fab1; &#x1fab4; &#x1fad0; &#x1fad2; &#x1fad1;…...

字符串函数和内存函数

&#x1f355;博客主页&#xff1a;️自信不孤单 &#x1f36c;文章专栏&#xff1a;C语言 &#x1f35a;代码仓库&#xff1a;破浪晓梦 &#x1f36d;欢迎关注&#xff1a;欢迎大家点赞收藏关注 字符串函数和内存函数 文章目录字符串函数和内存函数前言1. 字符串函数介绍1.1 s…...

Web3中文|GPT-4超越GPT-3.5的五大看点

A Beautiful CinderellaDwelling EagerlyFinally Gains HappinessInspiring Jealous KinLove Magically Nurtures Opulent PrinceQuietly RescuesSlipper TriumphsUniting Very WondrouslyXenial Youth Zealously这是一段描述童话故事《灰姑娘》的内容&#xff0c;它出自GPT-4之…...

动态矢量瓦片缓存库方案

目录 前言 二、实现步骤 1.将数据写入postgis数据库 2.将矢量瓦片数据写入缓存库 3.瓦片接口实现 4.瓦片局部更新接口实现 总结 前言 矢量瓦片作为webgis目前最优秀的数据格式&#xff0c;其主要特点就是解决了大批量数据在前端渲染时出现加载缓慢、卡顿的问题&#xff0…...

628.三个数的最大乘积

给你一个整型数组 nums &#xff0c;在数组中找出由三个数组成的最大乘积&#xff0c;并输出这个乘积。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;6 示例 2&#xff1a; 输入&#xff1a;nums [1,2,3,4] 输出&#xff1a;24 示例 3&#xff1a; …...

【数据结构】堆和集合笔记

自己写一个堆首先&#xff0c;明确一下&#xff0c;为什么需要堆&#xff1f;>考虑插入&#xff0c;删除&#xff0c;查找的效率。数组&#xff0c;查找&#xff0c;最快是二分查找O(lgN)。但查找完如果要做什么操作&#xff0c;比如删除&#xff0c;就要挪动元素了。所以合…...

java LinkedList 源码分析(通俗易懂)

目录 一、前言 二、LinkedList类简介 三、LinkedList类的底层实现 四、LinkedList类的源码解读 1.add方法解读 : 〇准备工作 。 ①跳入无参构造。 ②跳入add方法。 ③跳入linkList方法。 ④增加第一个元素成功。 ⑤向链表中添加第二个元素。 2.remove方法解读 : 〇准备工…...

Vue中实现路由跳转的三种方式详细分解

vue中实现路由跳转的三种方式 目录 vue中实现路由跳转的三种方式 一、使用vue-router 1.下载vue-router模块到当前工程 2.在main.js中引入VueRouter函数 3.添加到Vue.use()身上 – 注册全局RouterLink和RouterView组件 4.创建路由规则数组 – 路径和组件名对应关系 5…...

全国自学考试03708《中国近现代史纲要》重点复习精要

1. 西方列强的殖民扩张和鸦片战争的影响。&#xff08;两面性&#xff09; &#xff1a;反面—破坏了了中国的小农经济&#xff0c;是中国由封建社会转变为两半社会。 --一系列不公平条约&#xff0c;破坏了中国主权领土完整。 --压迫中国人民&#xff0c;给中国人民带来了巨大…...

数据库面试题——锁

了解数据库的锁吗&#xff1f; 锁是数据库系统区别于文件系统的一个关键特性&#xff0c;锁机制用于管理对共享资源的并发访问。 InnoDB下两种标准行级锁&#xff1a; 共享锁&#xff08;S Lock&#xff09;&#xff0c;允许事务读一行数据。 排他锁&#xff08;X Lock&…...

Python笔记 -- 文件和异常

文章目录1、文件1.1、with关键字1.2、逐行读取1.3、写入模式1.4、多行写入2、异常2.1、try-except-else2.2、pass1、文件 1.1、with关键字 with关键字用于自动管理资源 使用with可以让python在合适的时候释放资源 python会将文本解读为字符串 # -*- encoding:utf-8 -*- # 如…...

蓝桥杯刷题冲刺 | 倒计时24天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;马上就要蓝桥杯了&#xff0c;最后的这几天尤为重要&#xff0c;不可懈怠哦&#x1f43e; 文章目录1.修剪灌木2.统计子矩阵1.修剪灌木 题目 链接&#xff1a; 修剪灌木 - 蓝桥云课 (lanqiao.cn) 找…...

真正理解微软Windows程序运行机制——什么是消息

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天说说Windows程序的运行机制。经常被问到MFC到底是一个什么技术&#xff0c;为了解释这个我之前还写过帖子&#xff0c;但是很多人还是不理解。其实这没什么&#xff0c;我在学生时代也被这个问题困绕过。…...

HTTP 缓存的工作原理

缓存是解决http1.1当中的性能问题主要手段。缓存可能存在于客户端浏览器上&#xff0c;也可以存在服务器上面&#xff0c;当使用过期缓存可能给用户展示的是错误的信息而导致一些bug。 HTTP 缓存&#xff1a;为当前请求复用前请求的响应 • 目标&#xff1a;减少时延&#xff1…...

RK3568在Android上进行驱动模块开发(源码外)

文章目录 前言一、ARCH架构二、编译器三、建立自己的Makefile文件总结前言 本文记录在驱动开发时,由于编译内核时间较长,经常会选择单独编译一个模块,这里主要讲解,makefile文件如何编写(主要是编译器和架构) 提示:以下是本篇文章正文内容,下面案例可供参考 一、ARCH…...

操作技巧 | 在Revit中借用CAD填充图案的方法

在建模过程中&#xff0c;有时需要达到多种填充效果&#xff0c;而CAD中大量的二维填充图案&#xff0c;便是最直接的资源之一。 使用 填充图案之前 使用 填充图案之后 其中要用到主要命令便是对表面填充图案的添加与编辑 简单效果 如下 模型填充与绘图填充 区别 模型填…...

Java的二叉树、红黑树、B+树

数组和链表是常用的数据结构&#xff0c;数组虽然查找快&#xff08;有序数组可以通过二分法查找&#xff09;&#xff0c;但是插入和删除是比较慢的&#xff1b;而链表&#xff0c;插入和删除很快&#xff08;只需要改变一些引用值&#xff09;&#xff0c;但是查找就很慢&…...

昨天某读者拿到华为OD岗位offer,今天来分享一下经验,包含华为OD机试

来自读者投稿&#xff0c;已经拿到华为 OD 开发岗位 offer&#xff0c;询问了一些问题&#xff0c;下面是他的一些经验。 文章目录华为 OD 投递简历华为 OD 机试分数OD 机试通过之后&#xff0c;收到综合测评OD 技术面&#xff08;时长 1 小时左右&#xff09;主管/HR 面试&…...

树的遍历方式(前中后,层序遍历,递归,迭代,Morris遍历)-----直接查询代码

目录 一.前序遍历 1.递归 2.栈迭代 3.Morris遍历 二.中序遍历 1.递归 2.栈迭代 3.Morris遍历 三.后序遍历 1.递归 2.栈迭代 3.Morris遍历 四.前中后序的统一迭代法 1.前序遍历 2.中序遍历 3.后序遍历 五.层序遍历 1.队列迭代 2.之字形层序遍历 3.锯齿形层序…...

Docker Registry部署镜像私有仓库及鉴权认证

文章目录一、Docker Registry是什么&#xff1f;二、Docker Registry部署私有仓库2.1、Docker Registry安装2.2、Docker Registry配置2.3、启动Docker Registry2.4、Docker客户端配置2.5、向Docker Registry上传和下载镜像三、Docker Registry鉴权和认证3.1、基本认证3.2、Bear…...

stm32外设-中断详解

0. 写在最前 本栏目笔记都是基于stm32F10x 1. 中断是啥&#xff1f; 什么是中断&#xff1a;CPU在处理某一事件A时&#xff0c;发生的另外某一事件B请求CPU去处理&#xff08;产生了中断&#xff09;&#xff0c;随后CPU暂时中断当前正在执行的任务&#xff0c;去对事件B进行处…...