SpringBoot基础知识

谈一谈你对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工程,它是一个复合注解,包含了以下三个注解:

  2. @SpringBootConfiguration :相当于 @Configuration,表示这是一个配置类。

  3. @EnableAutoConfiguration :启用 Spring Boot 的自动配置机制,根据类路径中的依赖自动配置 Spring 应用。

  4. @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的核心配置文件有哪些,作用是什么

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

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

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

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

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

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

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

热部署: 修改代码不需要重启,就可以实现编译并部署到服务器上。(1)在开发时修改代码不需要重启服务,节省了时间。(2)部署在服务器上的程序,可以在不停止的情况下进行升级。

①使用devtools。在配置文件中把devtools.restart.enabled 设置为 true。每次都需要build一下才行。

②idea设置实现热部署。

相关推荐
JOJO___9 分钟前
Spring MVC 全局异常 总结
java·spring·mvc
潘多编程15 分钟前
Spring Boot集成LiteFlow使用详解
java·spring boot·后端
码农褚16 分钟前
java springboot 集成 okHttp 发送get、post请求
java·spring boot·okhttp
啊卡无敌1 小时前
Spring事务
java·数据库·mysql·spring
噜噜噜鹿鹿1 小时前
【秋招笔试题】多多排序
java·开发语言
dzx1562 小时前
Java基础|多线程:多线程分页拉取
java·开发语言
CH3_CH2_CHO2 小时前
JAVA基本简介(期末)
java
罗政2 小时前
[附源码]宠物领养管理系统+SpringBoot
spring boot·后端·宠物
林小果14 小时前
适配器模式
java·开发语言·设计模式·适配器模式