SpringBoot相关知识点总结

news2024/11/20 14:35:24

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包实现起步依赖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1609751.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言数据结构之顺序表

目录 1.线性表2.顺序表2.1顺序表相关概念及结构2.2增删查改等接口的实现 3.数组相关例题 1.线性表 线性表(linear list)是n个具有相同特性(数据类型相同)的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff…

【RV1106的ISP使用记录之基础知识】硬件连接关系与设备树的构建

RV1106具备2个mipi csi2 dphy硬件,1个VICAP硬件和1个ISP硬件。其中: 1、mipi csi2 dphy 用于对数据流的解析,支持MIPC,LVDS,DVP三种接口; 2、VICAP用于数据流的捕获; 3、ISP用于对图像数据进行处理; 这三个…

【QTM中文教程】01:Quick Terrain Modeller介绍、下载与安装

文章目录 一、Quick Terrain Modeller简介二、Quick Terrain Modeller特点功能三、Quick Terrain Modeller下载安装1. 下载地址2. 安装教程一、Quick Terrain Modeller简介 Quick Terrain Modeler(QTM)是一种专业的地形建模软件,用于处理和分析地形数据。它提供了一系列功能…

【漏洞复现】泛微e-cology ProcessOverRequestByXml接口存在任意文件读取漏洞

漏洞描述 泛微e-cology依托全新的设计理念,全新的管理思想。 为中大型组织创建全新的高效协同办公环境。 智能语音办公,简化软件操作界面。 身份认证、电子签名、电子签章、数据存证让合同全程数字化。泛微e-cology ProcessOverRequestByXml接口存在任意文件读取漏洞 免责声…

【漏洞复现】宏景eHR showmediainfo SQL注入漏洞

0x01 产品简介 北京宏景世纪软件股份有限公司(简称“宏景软件”)专注于国有企事业单位人力与人才管理数智化(数字化、智能化)产品的研发和应用推广。 0x02 漏洞概述 宏景eHR /workbench/duty/showmediainfo接口存在SQL注入漏洞…

Jenkins用maven风格build报错解决过程记录

1、Jenkins2.453新建项目,构建风格选的maven 2、自由风格构建部署没有任何问题,但是maven风格build一直失败,报错如下图 3、解决方案:在系统管理–系统配置–Maven项目配置,删除全局MAVEN_OPT的路径信息,…

oracle 清空回收站

参考官方文档 select * from user_recyclebin; select * from dba_recyclebin; ---清除回收站中当前用户下的对象 purge recyclebin; ---清除回收站中所有的对象 purge dba_recyclebin; ---清除回收站中指定用户的表 PURGE TABLE owner.table_name; ---清除回收站中指…

PSCAD|应用于输电线路故障测距的行波波速仿真分析

1 主要内容 该程序参考文献《应用于输电线路故障测距的行波波速仿真分析》,利用线路内部故障产生的初始行波浪涌达线路两端测量点的绝对时间之差值计算故障点到两端测量点之间的距离,并利用小波变换得到初始行波波头准确到达时刻,从而精准定…

HTML 入门 ( 一 )

HTML文档创建 首先创建一个txt文本文档 修改文件后缀 HTML标签 标签结构 标签又称为元素,是HTML的基本组成单位分为: 双标签与单标签推荐小写标签名 结构: 双标签示例代码: <marquee> My name is Kvein. </marquee>单标签示例代码: <input>标签的并列与嵌…

AndroidStudio右下角显示内存使用情况

目录 一.具体效果 二.4.0以下版本 三.4.0以上版本 四.增加内存配置 一.具体效果 二.4.0以下版本 1.打开 Android Studio. 2.进入设置界面。点击 Android Studio 左上角的“File”&#xff0c;然后选择“Settings” 3.在设置界面中&#xff0c;选择“Appearance & Beha…

汇编语言与x64函数参数传递

本节课学习视频&#xff1a;https://pan.quark.cn/s/429055967dfd 汇编语言作为编程语言与机器语言之间的桥梁&#xff0c;直接反映了硬件的工作方式。在不同的操作系统和硬件架构中&#xff0c;函数参数的传递方式可能有所不同。今天&#xff0c;我们将探讨x64位环境下函数参…

KDD‘23 | AlphaMix: 高效专家混合框架(MoE)显著提高上证50选股表现

KDD23 | AlphaMix: 高效专家混合框架&#xff08;MoE&#xff09;显著提高上证50选股表现 原创 QuantML QuantML 2024-04-18 09:17 上海 Content 本文提出了一个名为AlphaMix的新型三阶段专家混合&#xff08;Mixture-of-Experts&#xff0c;MoE&#xff09;框架&#xff0c;…

c++使用spdlog库打日记

打日记 打日志的本质就是多输出&#xff0c;c没有自带的日志库&#xff0c;只能使用第三方库实现&#xff0c;当然&#xff0c;直接cout输出也可以&#xff0c;但是一般日志库都进行了优化&#xff0c;比我们使用cout输出的效率更高&#xff0c;同时效果也更好&#xff0c;这里…

正大国际:什么是庞氏骗局?

在金钱的诱惑下&#xff0c;人性的贪婪与恐惧交织成一张无形的网&#xff0c;让无数人沉迷其中&#xff0c;无法自拔。这其中&#xff0c;庞氏骗局作为一种极具欺骗性的金融诈骗手段&#xff0c;更是将人们的贪婪与信任利用到了极致。那么&#xff0c;究竟什么是庞氏骗局呢&…

1096 大美数

solution B被A整除&#xff0c;B是A的倍数。B / AA整除B A把B整除 &#xff22;被A整除 B / A >n可以整除不同的四个因数之和 等价于 (a b c d) % n 0 #include<iostream> #include<cmath> using namespace std; int main(){int k, n, t;scanf("%d&q…

基于TCC的分布式事务

优质博文&#xff1a;IT-BLOG-CN 一、分布式事务简介 分布式的架构中&#xff0c;分布式的事务是一个绕不过的挑战&#xff0c;微服务理念的流行让分布式的问题日益突出。 在公司内部&#xff0c; 笔者所接触的管理系统中实际上也存在着分布式事务。 这里假设有这三个系统&…

Redis从入门到精通(二十二)Redis原理之数据结构、网络模型、通心协议、内存回收

文章目录 第8章 Redis原理8.1 Redis数据结构8.1.1 RedisObject8.1.2 动态字符串&#xff08;SDS&#xff09;8.1.3 string8.1.4 List8.1.5 Set8.1.6 ZSet8.1.7 Hash 8.2 Redis网络模型8.2.1 五种网络模型介绍8.2.1.1 用户空间和内核空间8.2.1.2 阻塞IO8.2.1.3 非阻塞IO8.2.1.4 …

第二证券策略:股指预计维持震荡格局 关注金融、工程建设等板块

第二证券指出&#xff0c;一季度GDP同比增加5.3%&#xff0c;符合我们早前5%—5.5%的预测。边际上看&#xff0c;3月工业增加值、社零总额、出口同等比增速均显着回落&#xff0c;主要是1—2月阶段性提振因素衰退&#xff08;如闰年、集中假日、新年错位等&#xff09;以及去年…

LeetCode in Python 200. Number of islands (岛屿数量)

岛屿数量既可以用深度优先搜索也可以用广度优先搜索解决&#xff0c;本文给出两种方法的代码实现。 示例&#xff1a; 图1 岛屿数量输入输出示意图 方法一&#xff1a;广度优先搜索(bfs) 代码&#xff1a; class Solution:def numIslands(self, grid):if not grid:return 0…