SpringBoot高频面试题
1. 什么是SpringBoot?(对SpringBoot的理解)
- Spring Boot 是Spring中的一个开源的子项目。SpringBoot主要是简化了 Spring 的初始搭建以及开发过程,简化了原本繁重的配置,使用 properties 或 yaml 文件的方式来进行配置。提供了各种启动器,让开发者能快速上手。
- 简单的说,SpringBoot 简化了Spring应用开发,约定大于配置,去繁从简,只要运行就能创建一个独立的、产品级别的应用。
2. SpringBoot的优点?
-
可以先回答一个使用了SpringBoot给你比较直观的感受:上手比较快,开发的效率也很高;不需要进行繁重的配置,同时避免大量的 Maven 导入和各种版本冲突问题。
-
然后再进行细说:比如SpringBoot可以…
- 独立运行
Spring Boot 内嵌了各种 servlet 容器,比如Tomcat、Jetty等,现在不再需要打成 war 包部署到容器中,Spring Boot只要打成一个可执行的 jar 包就能独立运行,所有的依赖包都在一个jar包内。
-
快速使用,原理繁琐的配置
spring-boot-starter-web启动器自动依赖其他组件,减少了maven的配置。而且添加了spring-boot-starter-web启动器就能拥有web的功能,无需其他配置。
-
无代码生成和XML配置
Spring Boot 配置过程中无代码生成,也无需XML配置文件就能完成所有配置工作
-
应用监控
提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等
3. SpringBoot 的核心注解是哪个?它主要由哪几个注解组成的?
- 启动类上面的注解是**@SpringBootApplication**,它是 SpringBoot 的核心注解,主要组合包含了以下3 个注解:
- @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
- @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项
- @ComponentScan:Spring组件扫描。
4. 如何理解 Spring Boot 配置加载顺序?
- 在 SpringBoot 里面,可以使用properties文件、YAML文件、系统环境变量、命令行参数等方式来加载配置。
5. Spring Boot 的核心配置文件有哪几个?它们的区别是什么?
-
Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。
application 配置文件主要用于 Spring Boot 项目的自动化配置。
bootstrap 配置文件有以下几个应用场景。
- 使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的
配置属性来加载外部配置中心的配置信息; - 一些固定的不能被覆盖的属性;
- 一些加密/解密的场景;
- 使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的
6. Spring Boot 中的 starter 到底是什么?
- Starte基本上还是基于 Spring 已有功能来实现的。首先它提供了一个自动化配置类,一般命名为 XXXAutoConfiguration,在这个配置类中通过条件注解来决定一个配置是否生效,然后它还会提供一系列的默认配置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性注入将这些配置属性注入进来,新注入的属性会代替掉默认属性。正因为如此,很多第三方框架,我们只需要引入依赖就可以直接使用了。当然,开发者也可以自定义 Starter。
7. spring-boot-starter-parent 有什么用?
- spring-boot-starter-parent 主要有如下作用:
- 可以定义Java 编译版本
- 使用 UTF-8 格式编码。
- 继承自 spring-boot-dependencies,这个里边定义了依赖的版本,所以我们在写依赖时不需要写版本号。
- 执行打包操作的配置。
- 自动化的资源过滤、插件配置。
- 针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如 applicationdev.properties 和 application-dev.yml。
8. Spring Boot 打成的 jar 和普通的 jar 有什么区别?
- Spring Boot 项目最终打包成的 jar 是可执行 jar ,这种 jar 可以直接通过终端命令来运行
- Spring Boot 打成的 jar 不可以作为普通的 jar 被其他项目依赖,即使依赖了也无法使用其中的类。因为普通的 jar 包,解压后直
接就是包名,包里就是我们的代码,而 Spring Boot 打包成的可执行 jar 解压后,在 \BOOT-INF\classes 目录下才是我们的代码,因此无法被直接引用。如果非要引用,可以在 pom.xml 文件中增加配置,将 Spring Boot 项目打包成两个 jar ,一个可执行,一个可引用。