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

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

  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设置实现热部署。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • FastAPI挂载静态资源
  • 使用 SSH ProxyJump 一步到位连接远程服务器
  • go语言基础入门(一)
  • 《Effective Debugging:软件和系统调试的66个有效方法》读书笔记-Part2
  • 力扣41 缺失的第一个正数 Java版本
  • Java语言程序设计基础篇_编程练习题**18.34 (游戏:八皇后问题)
  • centos7防火墙白名单总结
  • 在MySQL中,要查询所有用户及其权限,您可以使用以下命令:
  • springboot+redis+缓存
  • 59.【C语言】内存函数(memmove函数)
  • python爬虫初体验(二)
  • 611. 有效三角形的个数
  • pip install、yum install和conda install三者技术区分
  • Django一分钟:DRF快速实现JWT认证与RBAC权限校验
  • 《程序猿之设计模式实战 · 适配器模式》
  • hexo+github搭建个人博客
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • echarts花样作死的坑
  • E-HPC支持多队列管理和自动伸缩
  • input实现文字超出省略号功能
  • java第三方包学习之lombok
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • NSTimer学习笔记
  • spark本地环境的搭建到运行第一个spark程序
  • 分布式事物理论与实践
  • 复习Javascript专题(四):js中的深浅拷贝
  • 警报:线上事故之CountDownLatch的威力
  • 码农张的Bug人生 - 初来乍到
  • 如何编写一个可升级的智能合约
  • 使用权重正则化较少模型过拟合
  • 详解NodeJs流之一
  • 学习ES6 变量的解构赋值
  • 一份游戏开发学习路线
  • 阿里云API、SDK和CLI应用实践方案
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • 组复制官方翻译九、Group Replication Technical Details
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • # centos7下FFmpeg环境部署记录
  • #if和#ifdef区别
  • #pragma once
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (SERIES12)DM性能优化
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (十八)SpringBoot之发送QQ邮件
  • (顺序)容器的好伴侣 --- 容器适配器
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (自适应手机端)行业协会机构网站模板
  • **PHP分步表单提交思路(分页表单提交)
  • .apk文件,IIS不支持下载解决
  • .net framework 4.0中如何 输出 form 的name属性。