微服务springboot详细解析(一)
目录
1.Spring概述
2.什么是SpringBoot?
3.第一个SpringBoot程序
4.配置参数优先级
5.springboot自动装配原理
6.@SpringBootApplication&SpringApplication.run
7.@ConfigurationProperties(prefix = "")
8.@Validated数据校验
29、聊聊该如何写一个网站_哔哩哔哩_bilibili
学习路线:【狂神说Java】SpringBoot最新教程IDEA版通俗易懂_哔哩哔哩_bilibili


1.Spring概述
Spring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架
目的:Spring是为了解决企业级应用开发的复杂性而创建的,简化开发
那么Spring是如何简化Java开发的?为了降低Java开发的复杂性,Spring采用了以下4种关键策略:
- 基于POJO的轻量级和最小侵入性编程
- 通过IOC、DI和面向接口实现松耦合
- 基于切面(AOP)和惯例进行声明式编程
- 通过切面和模版减少样式代码
2.什么是SpringBoot?
学过javaweb的就知道,开发一个web应用,从最初开始接触Servlet结合Tomcat,在前端跑出一个Hello Wolrld程序,是要经历特别多的步骤;后来就用了框架Struts,再后来是SpringMVC,到了现在的SpringBoot,过一两年又会有其他web框架出现;什么是SpringBoot呢,就是一个javaweb的开发框架而已,和SpringMVC类似,对比其他javaweb框架的好处,官方说是简化开发,约定大于配置(核心思想,越是简化的东西越是有规定,比如文件夹的上下位置、命名都是有规定的),you can"just run",能迅速的开发web应用,几行代码开发一个http接口即可。
所有的技术框架的发展似乎都遵循了一条主线规律:从一个复杂应用场景衍生一种规范框架,人们只需要进行各种配置而不需要自己去实现它,这时候强大的配置功能成了优点;发展到一定程度之后,人们根据实际生产应用情况,选取其中实用功能和设计精华,重构出一些轻量级的框架;之后为了提高开发效率,嫌弃原先的各类配置过于麻烦,于是开始提倡“约定大于配置”,进而衍生出一些一站式的解决方案。
约定大于配置场景:maven、spring、springmvc、springboot、docker...
程序猿的程序 = 数据结构 + 算法(集合框架map、list)
码农的程序 = 面向对象 + 框架
3.第一个SpringBoot程序
看懂pom.xml文件:4、第一个springboot程序_哔哩哔哩_bilibili
在前端发出hello请求
若想要实现热部署,在创建项目时勾选DevTools即可

4.配置参数优先级


此外,如果你在相同优先级位置同时有application.properties和application.yml,那么application.properties里的属性里面的属性就会覆盖application.yml
微服务 SpringBoot 2.0(二):配置文件解析 - 简书
5.springboot自动装配原理
如果面试的时候问到springboot,谈谈理解,能聊的有自动装配和run()方法,在下面视频10min处7、了解下主启动类怎么运行_哔哩哔哩_bilibili
狂神说SpringBoot02:运行原理初探 - 遇见狂神说 - 博客园
6.@SpringBootApplication&SpringApplication.run
首先我们来看一段启动代码:
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}
从上面代码来看,@SpringBootApplication 和 SpringApplication.run长得很相似,但是前者是一个注解,后者是一个SpringApplication类的静态方法,首先我们来看@SpringBootApplication
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM,classes = {TypeExcludeFilter.class}
), @Filter(type = FilterType.CUSTOM,classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
...
}
首先我们来分析@SpringBootConfiguration,在此之前我们要知道@Configuration(它与@Bean是一套的,一个是配置类一个是组件),任何一个标注了@Configuration的Java类定义都是一个JavaConfig配置类,凡是经过该注解修饰的,均被实例化到Spring应用程序上下文中,由spring统一管理生命周期,也就是IOC
至于第二部分SpringApplication.run,分析该方法主要分两部分,一是SpringApplication实例化,二是run方法的执行,请看以下流程图:

最主要的功能在我看来有两个:
- 推断应用的类型是普通的项目还是Web项目
- 推断并设置main方法的定义类,找到运行的主类(这也就是为什么run方法要传入启动类的字节码文件)
微服务 SpringBoot 2.0(三):启动剖析之@SpringBootApplication - 简书
微服务 SpringBoot 2.0(四):启动剖析之SpringApplication.run - 简书
7.@ConfigurationProperties(prefix = "")
如下所示在application.yml中给person配置属性
person:id: 12345name: tianmingage: 18
然后实现实体类与配置类绑定,Person就有值了(或者@Value一个一个绑定)
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "person")
public class Person {private int id;private String name;private int age;
}
8.@Validated数据校验
Springboot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。我们这里来写个注解让我们的name只能支持Email格式:
@Component //注册bean
@ConfigurationProperties(prefix = "person")
@Validated //数据校验
public class Person {@Email(message="邮箱格式错误") //name必须是邮箱格式private String name;
}
常见参数如下所示:
@NotNull(message="名字不能为空")
private String userName;
@Max(value=120,message="年龄最大不能查过120")
private int age;
@Email(message="邮箱格式错误")
private String email;空检查
@Null 验证对象是否为null
@NotNull 验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.Booelan检查
@AssertTrue 验证 Boolean 对象是否为 true
@AssertFalse 验证 Boolean 对象是否为 false 长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=) string is between min and max included.日期检查
@Past 验证 Date 和 Calendar 对象是否在当前时间之前
@Future 验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern 验证 String 对象是否符合正则表达式的规则.......等等
除此以外,我们还可以自定义一些数据校验规则
额外推荐阅读,总结springboot学习的知识:61、聊聊现在和未来_哔哩哔哩_bilibili
相关文章:
微服务springboot详细解析(一)
目录 1.Spring概述 2.什么是SpringBoot? 3.第一个SpringBoot程序 4.配置参数优先级 5.springboot自动装配原理 6.SpringBootApplication&SpringApplication.run 7.ConfigurationProperties(prefix "") 8.Validated数据校验 29、聊聊该如何写一…...
深入探讨Go语言中的双向链表
简介 双向链表是链表家族中的一种高级结构,每个节点不仅指向下一个节点,还指向上一个节点。今天,我们将学习如何在Go语言中实现和操作这种灵活的数据结构。 双向链表的优缺点 优点: 可以从任一方向遍历链表,灵活性高…...
Fastapi + vue3 自动化测试平台---移动端App自动化篇
概述 好久写文章了,专注于新框架,新UI界面的实践,废话不多说,开搞 技术架构 后端: Fastapi Airtest multiprocessing 前端: 基于 Vue3、Vite、TypeScript、Pinia、Pinia持久化插件、Unocss 和 Elemen…...
ElasticSearch easy-es 聚合函数 group by 混合写法求Top N 词云 分词
1.将用户访问记录表数据同步到ES,并且分词,获取用户访问最多前十条词语。 Elasticsearch、Easy-es 快速入门 SearchAfterPage分页 若依前后端分离 Ruoyi-Vue SpringBoot 使用结巴分词器 <!-- 分词器--><dependency><groupId>com.hua…...
在 ASP.NET C# Web API 中实现 Serilog 以增强请求和响应的日志记录
介绍 日志记录是任何 Web 应用程序的关键方面。它有助于调试、性能监控和了解用户交互。在 ASP.NET C# 中,集成 Serilog 作为记录请求和响应(包括传入和传出的数据)的中间件可以显著提高 Web API 的可观察性和故障排除能力。 在过去的几周里&…...
2024年顶级小型语言模型前15名
本文,我们将深入了解2024年备受瞩目的十五款小型语言模型(SLMs),它们分别是Llama 3.1 8B、Gemma2、Qwen 2、Mistral Nemo、Phi-3.5等。这些SLMs以其精巧的体积和高效率著称,它们不需要依赖庞大的服务器资源,…...
精通 Python 网络安全(一)
前言 最近,Python 开始受到越来越多的关注,最新的 Python 更新添加了许多可用于执行关键任务的包。我们的主要目标是帮助您利用 Python 包来检测和利用漏洞,并解决网络挑战。 本书将首先带您了解与网络和安全相关的 Python 脚本和库。然后&…...
【python自动化二】pytest集成allure生成测试报告
pytest本身不会直接生成测试报告,而allure是一种生成测试报告的公共插件,可与多种测试框架配合生成测试报告,本文介绍下如何集成allure生成测试报告。 1.allure安装 1.安装allure-pytest 先安装allure的pytest插件,用于在pytes…...
网络版本的通讯录青春版(protobuf)
环境搭建 Protobuf 还常⽤于通讯协议、服务端数据交换场景。 因为我们主要目的只是为了学习protobuf,因此对于客户端,原本应该具备: 新增⼀个联系⼈ ◦ 删除⼀个联系⼈ ◦ 查询通讯录列表 ◦ 查询⼀个联系⼈的详细信息 这样四个功能。 …...
开源模型应用落地-安全合规篇-用户输入价值观判断(三)
一、前言 在深度合规功能中,对用户输入内容的价值观判断具有重要意义。这一功能不仅仅是对信息合法性和合规性的简单审核,更是对信息背后隐含的伦理道德和社会责任的深刻洞察。通过对价值观的判断,系统能够识别可能引发不当影响或冲突的内容,从而为用户提供更安全、更和谐的…...
神经网络入门实战:(十四)pytorch 官网内置的 CIFAR10 数据集,及其网络模型
(一) pytorch 官网内置的网络模型 图像处理: Models and pre-trained weights — Torchvision 0.20 documentation (二) CIFAR10数据集的分类网络模型(仅前向传播): 下方的网络模型图片有误,已做修改,具…...
【Rust在WASM中实现pdf文件的生成】
Rust在WASM中实现pdf文件的生成 前言概念和依赖问题描述分步实现pdf转Blob生成URL两种方式利用localstorage传递参数处理图片Vec<u8>到pdf格式的Vec<u8>使用rust创建iframe显示pdf的Blob最后 前言 实现了一个通用的前端jpg转pdf的wasm,因为动态响应框架无法直接打…...
在MySQL中执行sum case when报错:SUM does not exist
1. 报错 在pgsql中能正常运行的一段SQL在MySQL中运行的时候报错了: SELECT DATE( hr.handle_time ) AS statsDate,SUM ( CASE WHEN hma.app_type IN ( 2, 5 ) THEN ch_money ELSE 0 END ) AS aliPayAmt,SUM ( CASE WHEN hma.app_type IN ( 1, 4 ) THEN ch_money EL…...
【openssl】相关指令
熟悉下相关概念 x509:证书标准pem和der:两种(包括公私钥、证书签名请求、证书等内容的)的格式,前者是文本形式,linux常用,后者是二进制形式,windows常用,仅仅是格式&…...
实例分割详解
实例分割详解 引言 实例分割是计算机视觉领域的一项复杂任务,它要求模型能够识别图像中不同类别的对象,并对每个单独的对象进行像素级别的分类。与语义分割不同的是,实例分割不仅要区分不同的类别,还要识别同一类别中的不同个体…...
D87【python 接口自动化学习】- pytest基础用法
day87 pytest运行参数 -m -k 学习日期:20241203 学习目标:pytest基础用法 -- pytest运行参数-m -k 学习笔记: 常用运行参数 pytest运行参数-m -k pytest -m 执行特定的测试用例,markers最好使用英文 [pytest] testpaths./te…...
浅谈MySQL路由
华子目录 mysql-router介绍下载mysql-router安装mysql-router实验 mysql-router介绍 mysql-router是一个对应用程序透明的InnoDB Cluster连接路由服务,提供负载均衡、应用连接故障转移和客户端路由利用路由器的连接路由特性,用户可以编写应用程序来连接到…...
matlab中disp,fprintf,sprintf,display,dlmwrite输出函数之间的区别
下面是他们之间的区别: disp函数与fprintf函数的区别 输出格式的灵活性 disp函数:输出格式相对固定。它会自动将变量以一种比较直接的方式显示出来。对于数组,会按照行列形式展示;对于字符串,直接原样输出并换行。例如…...
30.100ASK_T113-PRO 用QT编写视频播放器(一)
1.再buildroot中添加视频解码库 X264, 执行 make menuconfig Target packages -->Libraries --> Multimedia --> X264 CLI 还需要添加 FFmpeg 2. 保存,重新编译 make all 3.将镜像下载开发板...
Linux-GPIO应用编程
本章介绍应用层如何控制 GPIO,譬如控制 GPIO 输出高电平、或输出低电平。 只要是用到GPIO的外设,都有可能用得到这些操作方法。 照理说,GPIO的操作应该是由驱动层去做的,使用寄存器操作或者GPIO子系统之类的框架。 但是࿰…...
mPDF实战指南:PHP环境下HTML转PDF的高性能解决方案深度解析
mPDF实战指南:PHP环境下HTML转PDF的高性能解决方案深度解析 【免费下载链接】mpdf PHP library generating PDF files from UTF-8 encoded HTML 项目地址: https://gitcode.com/gh_mirrors/mp/mpdf 在当今数字化办公环境中,PDF文档生成已成为企业…...
Kubernete
简介 Kubernetes(简称 K8s)是一个 开源的容器编排平台,用于自动化 部署、扩展、管理容器化应用 的工具。 假设你有很多个应用(比如用 Docker 打包的服务),Kubernetes 能帮你: ✅ 自动部署&#…...
[工具] 数学题库生成器(小学,初中,高中全包括) 面向中小学数学教学的自动出题工具,覆盖从小学一年级到高中三年级共 7 个学段、33 种题型
数学题库生成器(小学,初中,高中全包括) 基本覆盖各个年级的重点题型生成,并导出为word,可以显示解题步骤。# 数学题库生成器 MathMaster 数学题库生成器(MathMaster)是一款面向中小学…...
pytest Code Review skill.md
Skills 架构设计 本文深入探讨 Agent Skills 的技术架构和设计理念,帮助你理解 Skills 如何高效地扩展 Claude 的能力。 核心设计理念 Agent Skills 采用**渐进式披露(Progressive Disclosure)**架构,这是一种现代软件工程中的…...
第九届蓝桥杯国赛b组--备战国赛版h
第一题:0换零钞 - 蓝桥云课 模拟 #include <bits/stdc.h> using namespace std; int main() {int a,b,c0;for(a1;a<200;a)//一元钞票{for(b1;b<100;b)//两元钞票{for(c1;c<40;c)//五元钞票{if(ba*10&&(ab*2c*5)200){cout<<abc<&l…...
1987年6月27日下午13-15点出生性格、运势和命运
1987年6月17日,下午15点到17点之间,正值盛夏时节,阳光炽烈而漫长。这一天出生的孩子,是中国改革开放后“黄金十年”中诞生的又一批弄潮儿。他们的成长轨迹,与全球化浪潮的涌入、市场经济的深化以及互联网的萌芽几乎同步…...
Stable Diffusion 实战教程:从安装到图像生成
Stable Diffusion 实战教程:从安装到图像生成 前言 Stable Diffusion 是当前最流行的开源图像生成模型之一。它能够根据文字描述生成高质量的图像,在创意设计、游戏开发等领域有广泛应用。 我在多个项目中使用过 Stable Diffusion,从简单的图…...
py之代码实现获取字符串中每个字符的unicode值
def print_unicode_values(strings_list):"""接收字符串列表,提取所有字符的Unicode码点并以0x格式升序打印,后面加上对应字符"""unicode_values = set() # 使用集合自动去重for text in strings_list:for char in text...
免费在线去水印工具哪个好用?2026好用的去水印软件推荐,无广告干净体验
想要快速去除视频或图片上的水印,又不想下载安装应用,在线工具是最便捷的选择。本文为你精选了2026年最实用的免费在线去水印方案,包括专业小程序和web工具,帮你找到真正好用、无广告、完全免费的去水印解决方案。 快速对比&#…...
揭秘Midjourney V6拟物化失控真相:为什么87%的设计师调不出真实皮革/金属/织物质感?
更多请点击: https://intelliparadigm.com 第一章:Midjourney V6拟物化失控现象的底层本质 Midjourney V6 引入的拟物化(PhotorealismMaterial Fidelity)增强机制,并非单纯提升纹理细节,而是通过隐式材质…...
