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

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

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

相关文章

大数据大厂面试题

文章目录 一、Hadoop大厂面试真题1、请说下HDFS读写流程2、HDFS在读取文件的时候,如果其中一个块突然损坏了怎么办3、HDFS在上传文件的时候,如果其中一个DataNode突然挂掉了怎么办4、NameNode在启动的时候会做哪些操作5、Secondary NameNode了解吗&#…

椭圆曲线密码学(ECC)基本介绍和总结

背景 ECC英文全称"Elliptic Curve Cryptography",其背后的密码学原理或者说安全性,是基于椭圆曲线离散对数问题(Elliptic Curve Discrete Logarithm Problem,ECDLP)。ECC密码学被普遍认为是RSA密码系统的接…

Linux C++ 039-STL之拷贝和替换算法

Linux C 039-STL之拷贝和替换算法 本节关键字:Linux、C、拷贝算法、替换算法 相关库函数:copy、replace、replace_if、swap copy() 功能描述:容器内指定范围的元素拷贝到另一容器中 函数原型: copy(iterator beg, iterator en…

spring的自动配置原理

spring的自动配置原理 springboot配置文件的装配过程 1、springboot在启动的时候会加载主配置类,开启了EnableAutoConfiguration。 2、EnableAutoConfiguration的作用: 利用AutoConfigurationImportSelector给容器导入一些组件。查看selectImports方…

cuda 算法计算 提速技巧

1、除法改乘法 2、常数相关计算可提前算好,避免重复计算 3、尽量不用条件判断语句 4、sin、cos、pow等类似函数改为sinf、cosf、powf等单精度浮点运算函数,此操作会牺牲一点计算精度 5、避免使用double计算、整型除法等,单精度浮点数计算…

本地做好准备上传到Git分支,发现git上已经更新了,上传到dev分支

git add . git commit -m 备注 git pull --rebase origin dev 拉取dev上的代码合并到本地 git push -u origin dev推到远程dev上(注意着可能不是最后一步,先看完) 如果报错,意思是本地没有dev分支,没办法上传到git上…

Qt对象池,单例模式,对象池可以存储其他类的对象指针

代码描述: 写了一个类,命名为对象池(ObjectPool ),里面放个map容器。 3个功能:添加对象,删除对象,查找对象 该类只构建一次,故采用单例模式功能描述:对象池可…

树和二叉树(一)

一、树 非线性数据结构,在实际场景中,存在一对多,多对多的情况。 树( tree)是n (n>0)个节点的有限集。当n0时,称为空树。 在任意一个非空树中,有如下特点。 1.有且仅有一个特定的称为根的节点…

ELK日志分析系统之Kafka

目录 一、消息队列基本介绍 1、为什么需要消息队列(MQ) 2、使用消息队列的好处 1.解耦 2.可恢复性 3.缓冲 4.灵活性 & 峰值处理能力 5.异步通信 3、Kafka消息队列的两种模式 1.点对点模式 2.发布/订阅模式 二、Kafka基本介绍 1、Kafka定义 2、Kafka概念 3、…

4. Vue Router4 动态路由

在 Vue Router 4 中,动态路由是一种非常强大的功能,它允许我们根据不同的 URL 参数来渲染不同的组件或者同一组件的不同状态。这对于创建用户个人页面或者具有大量内容的应用来说非常有用。 基本用法 要创建一个动态路由,我们可以在路由的路…

SSRF靶场

SSRF概述 ​ 强制服务器发送一个攻击者的请求 ​ 互联网上的很多web应用提供了从其他服务器(也可以是本地)获取数据的功能。使用用户指定的URL,web应用可以获取图片(载入图片)、文件资源(下载或读取)。如下图所示&…

【Blockchain】连接智能合约与现实世界的桥梁Chainlink

去中心化预言机试图实现依赖因果关系而不是个人关系的去信任和确定性结果。它以与区块链网络相同的方式实现这些结果,即在许多网络参与者之间分配信任。通过利用许多不同的数据源并实施不受单个实体控制的预言机系统,去中心化的预言机网络有可能为智能合…

Java集合-Collections与Arrays

Collections与Arrays 集合框架中的工具类:特点:该工具类中的方法都是静态的。 Collections:常见方法: 对list进行二分查找:前提该集合一定要有序。 int binarySearch(list,key); //必须根据元素自然顺序对列表进行升级…

阿里云优惠券使用方法图解_优惠券免费领取入口

2024年最新阿里云优惠代金券领取入口,阿里云服务器优惠代金券、域名代金券,在领券中心可以领取当前最新可用的满减代金券,阿里云百科aliyunbaike.com分享阿里云服务器代金券、领券中心、域名代金券领取、代金券查询及使用方法,可以…

第11章 数据仓库和数据智能知识点梳理

第11章 数据仓库和数据智能知识点梳理(附带页码) ◼ 数据仓库(Data Warehouse,DW):始于 20 世纪 80 年代,发展于 20 世纪 90 年代,后与商务智能(Business Inteligence,BI…

jenkins下载安装(mac)

下载官网 直接命令安装 Sample commands: Install the latest LTS version: brew install jenkins-ltsStart the Jenkins service: brew services start jenkins-ltsRestart the Jenkins service: brew services restart jenkins-ltsUpdate the Jenkins version: brew upgrade …

【Javascript】数据类型检测

文章目录 一、typeof1、描述2、示例 二、instanceof1、语法2、示例 三、Object.prototype.toString.call()1、描述2、语法3、示例4、通用判断方法 在JavaScript中,你可以用不同的方式检测数据类型。这是因为JavaScript是一种弱类型或动态语言,变量没有预…

Linux 安装KVM虚拟机

什么是KVM虚拟机? KVM 是 Kernel-based Virtual Machine 的缩写,是一种用于虚拟化的开源硬件虚拟化技术。它使用 Linux 内核的虚拟化模块,将物理服务器划分为多个虚拟机。KVM 允许虚拟机直接访问物理硬件资源,从而提供出色的性能和稳定性,同…

WARNING: No swap limit support——查看docker状态时提示警告

环境:Ubuntu 20.04 1、警告详情 执行命令 service docker status如下图 2、解决办法 2.1 修改文件 执行命令 vim /etc/default/grub在GRUB_CMDLINE_LINUX中追加cgroup_enablememory swapaccount1,如下: # If you change this file…

MyBatis 面试题(四)

1. MyBatis 中 Mapper 接口的实现原理是? MyBatis 中 Mapper 接口的实现原理主要基于 Java 的动态代理和反射机制。以下是 Mapper 接口实现原理的详细解释: Mapper 接口定义:首先,开发者需要定义一个 Mapper 接口,该接口中声明了…