SpringBoot基础知识

devtools/2024/9/25 4:47:01/

谈一谈你对SpringBoot的理解,它有哪些特性(优点)?

SpringBoot用来快速开发Spring应用的一个脚手架,其目的是用来简化新Spring应用的初始搭建以及开发过程。

优点:

  1. 简化配置:提供了很多内置的starter结合自动配置对主流框架无配置集成、开箱即用。
  2. 自动配置:Spring Boot能根据当前类路径下的类、jar包来自动配置bean,如添加一个spring-boot-starterweb启动器就能拥有web的功能,无需其他配置。
  3. 无代码生成和XML配置:Spring Boot配置过程中无代码生成,也无需XML配置文件就能完成所有配置工作,这一切都是借助于条件注解完成的,这也是Spring4.x的核心功能之一。
  4. 独立运行:可以打包为一个独立的Jar文件,内置Tomcat服务器,可以直接启动web应用
  5. 依赖管理:管理了常用的第三方依赖的版本,减少了版本冲突问题
  6. 兼容性与扩展性:Spring Boot 基于 Spring 框架,继承了 Spring 的丰富生态系统,同时保持了极好的向后兼容性,适合长期项目开发。

Spring和SpringBoot的核心注解 

1. @SpringBootApplication:这是 Spring Boot 应用的核心注解,通常放在主类上,用于标记一个主启动类。标识了一个SpringBoot工程,它是一个复合注解,包含了以下三个注解: 

  1. @SpringBootConfiguration:相当于 @Configuration,表示这是一个配置类。
  2. @EnableAutoConfiguration:启用 Spring Boot 的自动配置机制,根据类路径中的依赖自动配置 Spring 应用。
  3. @ComponentScan:启用包扫描功能,扫描当前包及其子包中标注了 @Component@Service@Repository@Controller 等注解的类。 

2.@Conditional:与自动配置相关,允许根据某些条件有选择性地注册 Bean 或激活配置。例如,根据系统属性、环境变量等条件激活某些配置。 

  1. @ConditionalOnBean:用于自动配置中,当需要某个 Bean 存在时,才能加载某些组件
  2. @ConditionalOnClass:当类路径下存在指定的类时,才会加载当前的配置或 Bean
  3. @ConditionalOnMissBean:与 @ConditionalOnBean 相反。当容器中没有某个指定的 Bean 时,才会加载当前的配置或 Bean

 SpringBoot的自动配置原理

Spring Boot的自动配置原理是基于条件化配置(Conditional Configuration)的概念。自动配置使得在应用程序启动时,Spring Boot可以根据项目的依赖和类路径上的内容,自动配置各种功能和组件,而无需开发者显式地进行大量的配置。

1.通过@SpringBootConfiguration引入@EnableAutoConfigration来启动自动配置

2.@EnableAutoConfigration引入了@import,@import中导入了@deferredImportSelect注解,它会使SpringBoot的自动配置类顺序在最后,方便我们扩展和覆盖

3.Spring容器启动时:加载IOC容器时会解析@Import注解

4.然后读取所有starter中的META-INF/spring.factories文件(这个文件中列出了各个Starter所提供的自动配置类)

5.自动配置类的读取: Spring Boot会在启动时扫描项目的依赖中的spring.factories文件,找到各个Starter的自动配置类(AutoConfigrationClass类),并加载这些类。

6.@Conditional 注解的条件判断: 自动配置类通常会使用 @Conditional 注解来定义一些条件,例如 @ConditionalOnClass、@ConditionalOnMissingBean 等。这些条件会在Spring Boot启动时进行评估,根据条件判断结果来决定是否应用某个自动配置。

7.自动配置与Bean注入: 符合条件的自动配置类会在Spring容器中创建和注册一些Bean。这些Bean通常是应用程序所需的基础设施,如数据源、消息队列、缓存等。这些Bean会根据自动配置的条件和配置信息被注入到Spring的应用上下文中。

 SpringBoot的启动流程

1. 主方法执行

  • 启动 Spring Boot 应用的入口是 main 方法,通常是一个带有 @SpringBootApplication 注解的类。SpringApplication.run() 方法会被调用,启动整个应用。

2. 创建 Spring 应用上下文

  • SpringApplication 创建一个 ApplicationContext(通常是 AnnotationConfigApplicationContextSpringApplication 的子类),这是 Spring 容器的核心,用于管理 Bean 的生命周期和配置。

3. 设置应用环境

  • SpringApplication 会创建并设置一个 ConfigurableEnvironment,这包括读取配置文件(如 application.propertiesapplication.yml)、命令行参数、环境变量等。

4. 处理命令行参数

  • 如果有提供命令行参数,SpringApplication 会解析这些参数并应用到环境中。

5. 准备上下文

  • 在创建 ApplicationContext 之前,Spring Boot 会执行一些准备工作,如设置默认的环境配置、设置 Spring Boot 特性等。

6. 加载 Bean 定义

  • Spring Boot 使用 @Configuration@ComponentScan 注解来扫描并加载应用中的 Bean 定义。@SpringBootApplication 注解实际上是 @ComponentScan 的一个组合,自动扫描同包及其子包中的组件。

7. 自动配置

  • 启用自动配置功能,@EnableAutoConfiguration 注解会根据应用的依赖和环境条件自动配置所需的 Bean。Spring Boot 会加载 spring.factories 文件中的配置类,执行自动配置逻辑。

8. 创建和初始化 Bean

  • 根据 Bean 定义,Spring 容器创建这些 Bean,并通过依赖注入(DI)满足它们之间的依赖关系。此过程包括执行构造函数、设置属性、调用 @PostConstruct 方法等。

9. 应用上下文刷新

  • 调用 ApplicationContextrefresh() 方法,完成上下文的初始化。此时,所有 Bean 都会被创建并被注入。

10. 事件发布

  • 在上下文刷新后,Spring Boot 会发布一些事件,如 ApplicationReadyEventApplicationStartedEvent,开发者可以通过实现 ApplicationListener 接口来监听这些事件。

11. 运行 Web 应用

  • 如果是一个 Web 应用,Spring Boot 会启动内嵌的 Web 服务器(如 Tomcat、Jetty),并将应用的上下文与服务器关联,开始监听请求。

12. 完成启动

  • 应用完成启动后,可以开始处理来自客户端的请求,用户可以通过配置的端点与应用进行交互。

总结

Spring Boot 的启动流程大致分为以上几个步骤,从执行主方法开始,到创建和配置 Spring 上下文,再到加载 Bean 和自动配置,最终启动 Web 服务器并处理请求。这个流程简化了传统 Spring 应用的配置,使开发者能够专注于业务逻辑,而不是底层的框架细节。

Spring Boot REST 请求风格 

HTTP 协议是一个广泛应用的 Internet 协议,不同的请求方法,常见的有GET , POST , PUT , DELETE
REST 全称 Representational State Transfer ——(资源)表现层状态转化,是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便, 所以正得到越来越多网站的采用
REST 风格就是通过 Http 请求方式的不同来标识不同的方法,即对于同一个请求路径,可以根据请求方式的不同来区分它们

 

springBoot的核心配置文件有哪些,作用是什么

application 和 bootstrap 配置文件。
application: 用于项目的自动化配置。
bootstrap: 一些不能被覆盖的属性和加密或解密的场景。比application要先加载。

springBoot配置文件有几种类型,区别是什么

.yml和.properties区别主要是书写方法不一样

.properties基于键值对的配置文件,使用 key=value 的格式进行配置,易读。

.yml使用缩进和层级结构表示配置,比 application.properties 更加易写,更适合嵌套结构的配置。

.properties加载优先级大于.yml。

什么是热部署?springBoot怎么实现热部署 

热部署: 修改代码不需要重启,就可以实现编译并部署到服务器上。(1)在开发时修改代码不需要重启服务,节省了时间。(2)部署在服务器上的程序,可以在不停止的情况下进行升级。
①使用devtools。在配置文件中把devtools.restart.enabled 设置为 true。每次都需要build一下才行。
②idea设置实现热部署。


http://www.ppmy.cn/devtools/116815.html

相关文章

设计模式之外观设计模式

一、外观设计模式概念 外观模式 (Facade) 是一种结构型设计模式, 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式为复杂子系统提供了一个简单接口,并不为子系统…

分布式算法

分布式场景下的核心问题 分布式场景下困扰我们的3个核心问题(CAP):一致性、可用性、分区容错性。 1、一致性(Consistency):无论服务如何拆分,所有实例节点同一时间看到是相同的数据。 2、可用性…

Feed流系统重构:架构篇

重构对我而言,最大的乐趣在于解决问题。我曾参与一个C#彩票算奖系统的重构,那时系统常因超时引发用户投诉。接手任务时,我既激动又紧张,连续两天几乎废寝忘食地编码。结果令人振奋,算奖时间从一小时大幅缩短至十分钟。…

go语言 数组和切片

Array(数组)定义数组数组的长度多维数组切片(slice)切片的基本概念切片的定义从数组创建切片从数组创建切片注意 如何不受限地通过数组创建切片 使用内置函数 make 创建切片使用字面量创建切片判断切片是否为空1. 检查切片的长度2. 检查切片是否为nil空切…

线性代数(宋浩版)(4)

2.4逆矩阵 (不要把矩阵放在分母上) 方阵的行列式 性质1 性质2 性质3 伴随矩阵(只有方阵才有) 1.求出所有元素的代数余子式(矩阵先求行列式)。 2.按行求的代数余子式按列放。 定理1(重要&…

go 战略

1 跟go语言相关的工作全部列出来,这些岗位分别对应的什么产品 Go语言作为高效、并发处理强的编程语言,广泛应用于多个领域。以下列出与Go语言相关的岗位及其典型产品和应用场景: 1. 后端开发工程师 职责:编写服务器端业务逻辑&a…

网络分段:您需要了解的一切

什么是网络分段?为什么它很重要? 在当今互联互通的世界中,网络分段已成为组织网络安全战略中不可或缺的一部分。随着网络威胁不断演变和变得更加复杂,保护网络免受潜在入侵并尽量减少攻击面变得至关重要。根据最近的研究&#xf…

基于jsonpath的JSON数据查找

jsonpath是类似xpath的路径查找工具,可以方便地从JSON数据里查找到数据。 安装 pip install jsonpath使用 测试数据 import jsonpath import jsonjson_data { "store": {"book": [ { "category": "reference","…