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

微服务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种关键策略:

  1. 基于POJO的轻量级和最小侵入性编程
  2. 通过IOC、DI和面向接口实现松耦合
  3. 基于切面(AOP)和惯例进行声明式编程
  4. 通过切面和模版减少样式代码

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.propertiesapplication.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方法的执行,请看以下流程图:

最主要的功能在我看来有两个:

  1. 推断应用的类型是普通的项目还是Web项目
  2. 推断并设置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&#xff0c;并且分词&#xff0c;获取用户访问最多前十条词语。 Elasticsearch、Easy-es 快速入门 SearchAfterPage分页 若依前后端分离 Ruoyi-Vue SpringBoot 使用结巴分词器 <!-- 分词器--><dependency><groupId>com.hua…...

在 ASP.NET C# Web API 中实现 Serilog 以增强请求和响应的日志记录

介绍 日志记录是任何 Web 应用程序的关键方面。它有助于调试、性能监控和了解用户交互。在 ASP.NET C# 中&#xff0c;集成 Serilog 作为记录请求和响应&#xff08;包括传入和传出的数据&#xff09;的中间件可以显著提高 Web API 的可观察性和故障排除能力。 在过去的几周里&…...

2024年顶级小型语言模型前15名

本文&#xff0c;我们将深入了解2024年备受瞩目的十五款小型语言模型&#xff08;SLMs&#xff09;&#xff0c;它们分别是Llama 3.1 8B、Gemma2、Qwen 2、Mistral Nemo、Phi-3.5等。这些SLMs以其精巧的体积和高效率著称&#xff0c;它们不需要依赖庞大的服务器资源&#xff0c…...

精通 Python 网络安全(一)

前言 最近&#xff0c;Python 开始受到越来越多的关注&#xff0c;最新的 Python 更新添加了许多可用于执行关键任务的包。我们的主要目标是帮助您利用 Python 包来检测和利用漏洞&#xff0c;并解决网络挑战。 本书将首先带您了解与网络和安全相关的 Python 脚本和库。然后&…...

【python自动化二】pytest集成allure生成测试报告

pytest本身不会直接生成测试报告&#xff0c;而allure是一种生成测试报告的公共插件&#xff0c;可与多种测试框架配合生成测试报告&#xff0c;本文介绍下如何集成allure生成测试报告。 1.allure安装 1.安装allure-pytest 先安装allure的pytest插件&#xff0c;用于在pytes…...

网络版本的通讯录青春版(protobuf)

环境搭建 Protobuf 还常⽤于通讯协议、服务端数据交换场景。 因为我们主要目的只是为了学习protobuf&#xff0c;因此对于客户端&#xff0c;原本应该具备&#xff1a; 新增⼀个联系⼈ ◦ 删除⼀个联系⼈ ◦ 查询通讯录列表 ◦ 查询⼀个联系⼈的详细信息 这样四个功能。 …...

开源模型应用落地-安全合规篇-用户输入价值观判断(三)

一、前言 在深度合规功能中,对用户输入内容的价值观判断具有重要意义。这一功能不仅仅是对信息合法性和合规性的简单审核,更是对信息背后隐含的伦理道德和社会责任的深刻洞察。通过对价值观的判断,系统能够识别可能引发不当影响或冲突的内容,从而为用户提供更安全、更和谐的…...

神经网络入门实战:(十四)pytorch 官网内置的 CIFAR10 数据集,及其网络模型

(一) pytorch 官网内置的网络模型 图像处理&#xff1a; Models and pre-trained weights — Torchvision 0.20 documentation (二) CIFAR10数据集的分类网络模型&#xff08;仅前向传播&#xff09;&#xff1a; 下方的网络模型图片有误&#xff0c;已做修改&#xff0c;具…...

【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中运行的时候报错了&#xff1a; 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&#xff1a;证书标准pem和der&#xff1a;两种&#xff08;包括公私钥、证书签名请求、证书等内容的&#xff09;的格式&#xff0c;前者是文本形式&#xff0c;linux常用&#xff0c;后者是二进制形式&#xff0c;windows常用&#xff0c;仅仅是格式&…...

实例分割详解

实例分割详解 引言 实例分割是计算机视觉领域的一项复杂任务&#xff0c;它要求模型能够识别图像中不同类别的对象&#xff0c;并对每个单独的对象进行像素级别的分类。与语义分割不同的是&#xff0c;实例分割不仅要区分不同的类别&#xff0c;还要识别同一类别中的不同个体…...

D87【python 接口自动化学习】- pytest基础用法

day87 pytest运行参数 -m -k 学习日期&#xff1a;20241203 学习目标&#xff1a;pytest基础用法 -- pytest运行参数-m -k 学习笔记&#xff1a; 常用运行参数 pytest运行参数-m -k pytest -m 执行特定的测试用例&#xff0c;markers最好使用英文 [pytest] testpaths./te…...

浅谈MySQL路由

华子目录 mysql-router介绍下载mysql-router安装mysql-router实验 mysql-router介绍 mysql-router是一个对应用程序透明的InnoDB Cluster连接路由服务&#xff0c;提供负载均衡、应用连接故障转移和客户端路由利用路由器的连接路由特性&#xff0c;用户可以编写应用程序来连接到…...

matlab中disp,fprintf,sprintf,display,dlmwrite输出函数之间的区别

下面是他们之间的区别&#xff1a; disp函数与fprintf函数的区别 输出格式的灵活性 disp函数&#xff1a;输出格式相对固定。它会自动将变量以一种比较直接的方式显示出来。对于数组&#xff0c;会按照行列形式展示&#xff1b;对于字符串&#xff0c;直接原样输出并换行。例如…...

30.100ASK_T113-PRO 用QT编写视频播放器(一)

1.再buildroot中添加视频解码库 X264, 执行 make menuconfig Target packages -->Libraries --> Multimedia --> X264 CLI 还需要添加 FFmpeg 2. 保存,重新编译 make all 3.将镜像下载开发板...

Linux-GPIO应用编程

本章介绍应用层如何控制 GPIO&#xff0c;譬如控制 GPIO 输出高电平、或输出低电平。 只要是用到GPIO的外设&#xff0c;都有可能用得到这些操作方法。 照理说&#xff0c;GPIO的操作应该是由驱动层去做的&#xff0c;使用寄存器操作或者GPIO子系统之类的框架。 但是&#xff0…...

mPDF实战指南:PHP环境下HTML转PDF的高性能解决方案深度解析

mPDF实战指南&#xff1a;PHP环境下HTML转PDF的高性能解决方案深度解析 【免费下载链接】mpdf PHP library generating PDF files from UTF-8 encoded HTML 项目地址: https://gitcode.com/gh_mirrors/mp/mpdf 在当今数字化办公环境中&#xff0c;PDF文档生成已成为企业…...

Kubernete

简介 Kubernetes&#xff08;简称 K8s&#xff09;是一个 开源的容器编排平台&#xff0c;用于自动化 部署、扩展、管理容器化应用 的工具。 假设你有很多个应用&#xff08;比如用 Docker 打包的服务&#xff09;&#xff0c;Kubernetes 能帮你&#xff1a; ✅ 自动部署&#…...

[工具] 数学题库生成器(小学,初中,高中全包括) 面向中小学数学教学的自动出题工具,覆盖从小学一年级到高中三年级共 7 个学段、33 种题型

数学题库生成器&#xff08;小学&#xff0c;初中&#xff0c;高中全包括&#xff09; 基本覆盖各个年级的重点题型生成&#xff0c;并导出为word&#xff0c;可以显示解题步骤。# 数学题库生成器 MathMaster 数学题库生成器&#xff08;MathMaster&#xff09;是一款面向中小学…...

pytest Code Review skill.md

Skills 架构设计 本文深入探讨 Agent Skills 的技术架构和设计理念&#xff0c;帮助你理解 Skills 如何高效地扩展 Claude 的能力。 核心设计理念 Agent Skills 采用**渐进式披露&#xff08;Progressive Disclosure&#xff09;**架构&#xff0c;这是一种现代软件工程中的…...

第九届蓝桥杯国赛b组--备战国赛版h

第一题&#xff1a;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日&#xff0c;下午15点到17点之间&#xff0c;正值盛夏时节&#xff0c;阳光炽烈而漫长。这一天出生的孩子&#xff0c;是中国改革开放后“黄金十年”中诞生的又一批弄潮儿。他们的成长轨迹&#xff0c;与全球化浪潮的涌入、市场经济的深化以及互联网的萌芽几乎同步…...

Stable Diffusion 实战教程:从安装到图像生成

Stable Diffusion 实战教程&#xff1a;从安装到图像生成 前言 Stable Diffusion 是当前最流行的开源图像生成模型之一。它能够根据文字描述生成高质量的图像&#xff0c;在创意设计、游戏开发等领域有广泛应用。 我在多个项目中使用过 Stable Diffusion&#xff0c;从简单的图…...

py之代码实现获取字符串中每个字符的unicode值

def print_unicode_values(strings_list):"""接收字符串列表,提取所有字符的Unicode码点并以0x格式升序打印,后面加上对应字符"""unicode_values = set() # 使用集合自动去重for text in strings_list:for char in text...

免费在线去水印工具哪个好用?2026好用的去水印软件推荐,无广告干净体验

想要快速去除视频或图片上的水印&#xff0c;又不想下载安装应用&#xff0c;在线工具是最便捷的选择。本文为你精选了2026年最实用的免费在线去水印方案&#xff0c;包括专业小程序和web工具&#xff0c;帮你找到真正好用、无广告、完全免费的去水印解决方案。 快速对比&#…...

揭秘Midjourney V6拟物化失控真相:为什么87%的设计师调不出真实皮革/金属/织物质感?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney V6拟物化失控现象的底层本质 Midjourney V6 引入的拟物化&#xff08;PhotorealismMaterial Fidelity&#xff09;增强机制&#xff0c;并非单纯提升纹理细节&#xff0c;而是通过隐式材质…...