一、Spring\SpringBoot\SpringCloud
Spring:Spring是SpringBoot和SpringCloud的基础。Spring是一个广泛使用的企业级 Java 应用程序框架,提供了应用开发的核心功能,如依赖注入、AOP(面向切面编程) 等,旨在简化开发过程。
SpringMVC:是 Spring 框架的一部分,是一个用于构建 Web 应用程序的强大框架。它遵循MVC(模型-视图-控制器)设计模式,使得开发者能够轻松开发处理用户请求的 Web 应用。
SpringBoot:Spring Boot 是一个基于 Spring 框架的开源 Java 框架,它简化了 Spring 应用程序的配置和部署,使开发人员可以更快地构建、部署和测试Spring应用。
SpringCloud:Spring Cloud 是一套基于 Spring Boot 的工具集,用于构建分布式系统和微服务架构。它提供了各种开箱即用的解决方案,帮助开发者快速实现复杂的分布式系统。
二、SpringBoot的核心特点
1、内嵌服务器:Spring Boot 支持内嵌的 HTTP 服务器,如 Tomcat、Jetty 或 Undertow,可以直接将应用程序打包成一个独立的 JAR 文件运行,简化了部署过程。
2、简化配置:Spring Boot 提供默认配置并且支持基于注解的配置,避免了传统 Spring 配置中繁琐的 XML 配置文件,减少了大量的手动配置。
3、自动配置(开箱即用):Spring Boot 提供了大量的自动配置选项,可以根据项目中的依赖自动配置 Spring 应用。比如,当你使用数据库相关的依赖时,Spring Boot 会自动配置数据源。
4、快速开发:Spring Boot 通过“约定大于配置”的理念,减少了配置文件的编写,使得开发者可以集中精力进行业务逻辑的开发。它还通过 Starter 依赖简化了常见模块的配置。
5、生产级特性:Spring Boot 提供了许多有助于生产环境的特性,例如健康检查、监控、日志管理等。
三、SpringBoot的基本结构
四、SpringBoot核心组件
五、SpringBoot的启动流程
(启动入口:当 SpringBoot 项目启动时,会在当前工作目录下寻找有@SpringBootApplication注解标识的类,即启动类。并在启动类的main 方法里调用 SpringApplication.run() 方法启动应用。)
六、面试题汇总
6.1 SpringBoot是如何通过main方法启动web项目的
首先,通过main方法调用SpringApplication.run()方法启动应用之后,SpringApplication 类的构造器会初始化应用程序的一些属性,如确定项目类型(Web 或 非Web),如果是Web类型,就创建和配置适应的ApplicationContext以及所需要的依赖。由于SpringBoot内置了服务器,因此会启动 Web 容器并监听指定端口,刷新 ApplicationContext 完成 Bean 创建与依赖注入,执行相关逻辑,最终使应用进入运行状态,开始监听和处理请求。
6.2 SpringBoot是如何实现自动配置的
Spring Boot 实现自动配置的核心机制是通过 @EnableAutoConfiguration 注解与 spring-boot-autoconfigure 包的配合来完成的。
6.3 SpringBoot支持哪些嵌入Web容器
6.4 application.properties和application.yml的区别
两者都是配置文件
6.5 SpringBoot中如何定义和读取自定义配置
定义:application.properties 或 application.yml 中定义配置。
读取:使用注解:
(1)@Value 注解:用于读取简单的配置项。
(2)@ConfigurationProperties 注解:适用于将一组相关的配置映射到 Java 对象,适合复杂配置。
6.6 SpringBoot配置文件加载优先级
优先级高的先加载
优先级顺序(由高到低):
附:外部配置文件 是指不存放在 Spring Boot 项目内部(如 src/main/resources 目录下)的配置文件,而是存放在项目外部的配置文件(例如操作系统的文件系统、网络路径、Docker 容器内部等)。这些文件可以通过环境变量、命令行参数或其他方式指定路径,Spring Boot 会加载这些外部配置文件来覆盖项目中的默认配置。
6.7 SpringBoot打成的jar和普通的jar有什么区别
6.8 SpringBoot是否可以使用xml配置
Spring Boot 可以使用 XML 配置,但是它并不是默认的配置方式也并不推荐,会产生优先级问题并失去一部分自动配置的优势。Spring Boot 强调的是 约定优于配置 和 注解配置,通过自动配置和 application.properties/application.yml 文件来简化配置。但是,Spring Boot 也支持使用 XML 配置,特别是对于需要迁移或集成的现有 Spring 项目。
6.9 SpringBoot默认同时可以处理的最大连接数是多少
6.10 如何理解SpringBoot中的starter
Spring Boot Starter 是一组针对特定功能的预配置模块。每个 Starter 包含了一个功能模块所需要的所有依赖,允许开发者通过简单地引入一个 Starter 来启用该功能,无需手动配置每个库和依赖。
有点像我们要去买一些商品,这时有一个人把它们都打包成了一个套餐,那我们不用再一个一个找了,可以直接买这个套餐节省时间和精力。
6.11 SpringBoot中如何实现定时任务
使用@Scheduled注解并开启定时任务功能
6.12 什么是SpringBoot Actuator?它有什么优势?
SpringBoot Actuator是SpringBoot提供的一个应用程序的管理和监控工具,允许开发者查看和管理应用的运行时状态、性能指标、健康检查等信息。
优势:
(1)易于集成:Spring Actuator 集成非常简单,只需在 Spring Boot 项目中引入 spring-boot-starter-actuator 依赖,然后启用相应的端点即可,无需复杂的配置。
(2)支持自定义: 开发者可以自定义暴露的端点或度量标准,扩展 Spring Actuator 的功能来满足特定的业务需求。
(3)自动检查:提供自动化的健康检查和性能度量功能,确保各个组件的正常运行。
6.13 SpringBoot1.X、SpringBoot2.X、SpringBoot3.X之间的区别以及主要的改进
(1)Spring Boot 1.x 主要集中在简化 Spring 应用的配置和启动过程,适合传统应用和单体应用。
(2)Spring Boot 2.x 重点在于对新技术(如 WebFlux 和响应式编程)的支持,以及对 Java 11+ 和微服务架构的优化,但仍基于JAVA EE,适合构建现代化的分布式系统。
(3)Spring Boot 3.x 基于Jakarta EE,完全兼容 Spring 6,强化对 Java 17 和 GraalVM 的支持,适合需要高性能、低启动时间的应用程序,并要求使用较新的 Java 版本。