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

SpringBoot相关知识点总结

1 SpringBoot的目的

简化开发,开箱即用。

2 Spring Boot Starter

Spring Boot Starter 是 Spring Boot 中的一个重要概念,它是一种提供依赖项的方式,可以帮助开发人员快速集成各种第三方库和框架。Spring Boot Starter 的目的是简化 Spring 应用程序的依赖管理,将一组相关的依赖项打包在一起,并提供一个依赖项描述文件,使开发人员可以快速集成。

每个 Starter 都是一个 Maven 或 Gradle 项目,其中包含了一组预定义的依赖项,,以及一些预配置的设置,可以快速启用某种特定功能。

Spring Boot Starters 的主要作用包括以下几个方面:

简化依赖管理:Spring Boot Starters 封装了一组常用的依赖项,如数据库连接、Web 开发、安全认证等,开发者只需要引入相应的 Starter,就能够自动获取所有需要的依赖项,无需手动配置大量的依赖项和版本号。

预配置设置:每个 Starter 都提供了一些预配置的设置,如默认的配置属性、bean 的定义等,可以帮助开发者快速搭建出符合需求的应用程序。这些预配置的设置可以减少开发者的配置工作,提高开发效率。

功能模块化:Spring Boot Starters 将常用的功能模块化,使得开发者可以根据需求选择合适的 Starter,并灵活组合使用,从而构建出符合需求的应用程序。这种模块化的设计使得应用程序的开发、维护和扩展更加简单和灵活。

约定优于配置:Spring Boot Starters 遵循 Spring Boot 的约定优于配置的设计原则,通过预定义好的依赖项和配置,简化了应用程序的配置过程,使得开发者可以更专注于业务逻辑的实现,而无需过多地关注底层技术细节。

Spring Boot Starter 的实现原理可以分为两个方面:依赖管理和自动配置。

3 @SpringBootApplication的作用
`@SpringBootApplication` 是 Spring Boot 中一个注解,它的作用是标记一个主类,通常是 Spring Boot 应用程序的入口类。这个注解实际上是一个组合注解,包含了以下几个注解:

1. `@SpringBootConfiguration`:指示该类是 Spring Boot 应用程序的配置类,相当于传统 Spring 应用程序中的 XML 配置文件。其中包含了应用程序的一些配置信息,如数据源配置、Bean 定义等。这样的配置类通常会被 @ComponentScan 注解扫描,并被 Spring 容器管理和使用。

2. `@EnableAutoConfiguration`:启用 Spring Boot 的自动配置机制,根据应用程序的依赖和类路径上的配置,自动配置应用程序的各种组件。

3. `@ComponentScan`:扫描当前包及其子包下的组件,包括注解了 `@Component`、`@Service`、`@Controller` 等注解的类,将它们注册到 Spring 容器中。

通过在主类上添加 `@SpringBootApplication` 注解,可以简化 Spring Boot 应用程序的配置和启动过程,开发者无需手动配置 XML 文件或者 Java 配置类,Spring Boot 会根据约定优于配置的原则自动完成大部分的配置和初始化工作。

总的来说,`@SpringBootApplication` 注解标记了一个类作为 Spring Boot 应用程序的主类,并启用了 Spring Boot 的自动配置机制和组件扫描机制,简化了应用程序的配置和启动过程,提高了开发效率。

3 SpringBoot的自动配置是如何实现的

简单来说就是自动去把第三方组件的Bean装载到IOC容器中,不需要开发人员再去
写Bean相关的配置,在springboot应用里面只需要在启动类上去加上
@SpringBootApplication注解,就可以去实现自动装配,它是一个复合注解真正去
实现自动装配的注解是@EnableAutoConfiguration这样一个注解,自动装配的实
现呢,主要依靠三个核心的关键技术。

引入Starter组件,这个组件里面必须包含有一个
@Configuration配置类,而在这个配置类里面,我们需要通过@Bean这个注解去声
明需要装配到IOC容器里面的Bean对象。

2 拿到第三方组件的配置类,Springboot使用基于约定去Starter组件的路径下META-INF/spring.factories里去找配置类

第三方jar包里面的配置类全路径都将放在classpath:/META-
INF/spring.factories文件里面,这样的话springboot就可以知道第三方jar包里面
这个配置类的位置。这个步骤主要是用到了spring里面的SpringFactoriesLoader

动态导入配置类,对配置类加载springboot拿到所有第三方jar包里面声明的配置类以后,ImportSelector 接口为 Spring 提供了一种动态导入配置类的机制,使得配置更加灵活和可扩展。通过合理地使用 ImportSelector 接口,你可以根据需求动态地加载不同的配置,从而实现更加灵活和可配置的应用程序。

实现ImportSelector接口,然后用@Import注解导入实现的 ImportSelector类,从而做到动态导入配置。

Spring Boot 在自动装配时会检测条件化注解。条件化注解用于控制特定的配置类或者 Bean 是否应该被应用到应用程序上下文中。

Spring Boot 通过@EnableAutoConfiguration开启自动装配,通过 SpringFactoriesLoader 最终加载META-INF/spring.factories中的自动配置类实现自动装配,自动配置类其实就是通过@Conditional按需加载的配置类,想要其生效必须引入spring-boot-starter-xxx包实现起步依赖

相关文章:

SpringBoot相关知识点总结

1 SpringBoot的目的 简化开发,开箱即用。 2 Spring Boot Starter Spring Boot Starter 是 Spring Boot 中的一个重要概念,它是一种提供依赖项的方式,可以帮助开发人员快速集成各种第三方库和框架。Spring Boot Starter 的目的是简化 Sprin…...

【QT】关于qcheckbox常用的三个信号,{sstateChanged(int) clicked() clicked(bool)}达成巧用

在 Qt 中,QCheckBox 是一个提供复选框功能的小部件,允许用户选择和取消选择一个或多个选项。QCheckBox 提供了几种信号来响应用户的交互,其中 stateChanged(int), clicked(), 和 clicked(bool) 是常用的。下面解释这些信号的意义及其用法。 …...

在线音乐网站的设计与实现

在线音乐网站的设计与实现 摘 要 在社会和互联网的快速发展中,音乐在人们生活中也产生着很大的作用。音乐可以使我们紧张的神经得到放松,有助于开启我们的智慧,可以辅助治疗,达到药物无法达到的效果,所以利用现代科学…...

【电路笔记】-数字缓冲器

数字缓冲器 文章目录 数字缓冲器1、概述2、单输入数字缓冲器3、三态缓冲器3.1 有效“高”三态缓冲器3.2 有效“高”反相三态缓冲器3.3 有效“低”三态缓冲器3.4 有效“低”反相三态缓冲器4、三态缓冲器控制数字缓冲器和三态缓冲器可以在数字电路中提供电流放大以驱动输出负载。…...

Opencv | 基于ndarray的基本操作

这里写目录标题 一. Opencv 基于ndarray的基本操作1. 浅拷贝2. np.copy ( ) 深拷贝3. 堆叠3.1 np.vstack ( ) 垂直方向堆叠3.2 np.hstack ( ) 水平方向堆叠 4. numpy创建图像5 np.transpose ( ) 更改维度顺序6. cv.resize ( ) 放大缩小7. np.clip ( ) 一. Opencv 基于ndarray的…...

【大语言模型】应用:10分钟实现搜索引擎

本文利用20Newsgroup这个数据集作为Corpus(语料库),用户可以通过搜索关键字来进行查询关联度最高的News,实现对文本的搜索引擎: 1. 导入数据集 from sklearn.datasets import fetch_20newsgroupsnewsgroups fetch_20newsgroups()print(fNu…...

UT单元测试

Tips:在使用时一定要注意版本适配性问题 一、Mockito 1.1 Mock的使用 Mock 的中文译为仿制的,模拟的,虚假的。对于测试框架来说,即构造出一个模拟/虚假的对象,使我们的测试能顺利进行下去。 Mock 测试就是在测试过程…...

leetcode-合并两个有序链表

目录 题目 图解 方法一 方法二 代码(解析在注释中) 方法一 ​编辑方法二 题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1…...

006Node.js cnpm的安装

百度搜索 cnpm,进入npmmirror 镜像站https://npmmirror.com/ cmd窗口输入 npm install -g cnpm --registryhttps://registry.npmmirror.com...

web server apache tomcat11-01-官方文档入门介绍

前言 整理这个官方翻译的系列,原因是网上大部分的 tomcat 版本比较旧,此版本为 v11 最新的版本。 开源项目 同时也为从零手写实现 tomcat 提供一些基础和特性的思路。 minicat 别称【嗅虎】心有猛虎,轻嗅蔷薇。 系列文章 web server apac…...

java的总结

由于最近已经开始做项目了,所以对java的基础知识的学习都是一个离散化的状态没有一个很系统的学习,都是哪里不会就去学哪里。 先来讲一下前后端的区别吧 在我的理解前端就是:客户端在前端进行点击输入数据,前端将这些数据整合起来…...

解决npm run dev跑项目,发现node版本不匹配,怎么跑起来?【已解决】

首先问题点就是我们npm run dev 运行项目的时候发现出错,跑不起来,类型下面这种 这里的出错的原因在于我们的node版本跟项目的版本不匹配 解决办法 我这里的问题是我的版本是node14的,然后项目需要node20的,执行下面的就可以正…...

flood_fill 算法|图形渲染

flood fill 算法常常用来找极大连通子图,这是必须掌握的基本算法之一! 图形渲染 算法原理 我们可以利用DFS遍历数组把首个数组的值记为color,然后上下左右四个方向遍历二维数组数组如果其他方块的值不等于color 或者越界就剪枝 return 代码…...

Promise简单概述

一. Promise是什么? 理解 1.抽象表达: Promise是一门新的技术(ES6规范) Promise是JS中进行异步编程的新解决方案(旧方案是单纯使用回调函数) 异步编程:包括fs文件操作,数据库操作(Mysql),AJAX,定时器 2.具…...

【Java集合进阶】数据结构(平衡二又树旋转机制)数据结构(红黑树、红黑规则、添加节点处理方案详解)

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 …...

富文本在线编辑器 - tinymce

tinymce 项目是一个比较好的富文本编辑器. 这里有个小demo, 下载下来尝试一下, 需要配置个本地服务器才能够访问, 我这里使用的nginx, 下面是我的整个操作过程: git clone gitgitee.com:chick1993/layui-tinymce.git cd layui-tinymcewget http://nginx.org/download/nginx-1.…...

从汇编代码理解数组越界访问漏洞

数组越界访问漏洞是 C/C 语言中常见的缺陷,它发生在程序尝试访问数组元素时未正确验证索引是否在有效范围内。通常情况下,数组的索引从0开始,到数组长度减1结束。如果程序尝试访问小于0或大于等于数组长度的索引位置,就会导致数组…...

skynet 使用protobuf

一、安装protobuf 下面的操作方法都是在 centos 环境下操作 #下载 Protocol Buffers 源代码: #您可以从 Protocol Buffers 的 GitHub 仓库中获取特定版本的源代码。使用以下命令克隆仓库 git clone -b v3.20.3 https://github.com/protocolbuffers/protobuf.git#编译…...

Vue Router 4 与 Router 3 路由配置与区别

文章目录 路由安装路由配置vue-router 3.x版本写法配置路由使用路由 vue-router 4.x版本写法配置路由使用路由 Vue Router 4 与 Vue Router 3 区别 路由安装 Vue 2 (使用 Vue Router 3) :npm install vue-router3 Vue 3 (使用 Vue Router 4) :npm insta…...

python借助elasticsearch实现标签匹配计数

给定一组标签 [{“tag_id”: “1”, “value”: “西瓜”}, {“tag_id”: “1”, “value”: “苹果”}],我想精准匹配到现有的标签库中存在的标签并记录匹配成功的数量。 标签id(tag_id)标签名(tag_name)标签值(tag_name )1水果西瓜1水果苹果1水果橙子2动物老虎 …...

【Oracle APEX开发小技巧12】

有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

Python如何给视频添加音频和字幕

在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...