SpringBoot
1. SpringBoot的优点
答:
- 简化Spring的配置
- 遵循
“约定大约配置”
- SpringBoot 内嵌 Tomcat。
2. SpringBoot约定大于配置是怎么实现的
答:
约定大于配置:遵循一套约定好的规定,系统自动为我们进行配置。
Spring Boot的 “约定大于配置” 是通过自动配置来实现的。
具体的实现步骤如下:
- Spring Boot在启动时,会加载在
spring-boot-autoconfigure-X.X.X.jar
包的META-INF
下的spring.factories
文件中配置。这个文件中的所有类,会被Spring Boot自动加载。不需要我们手动的进行配置。 - 当然,我们也可以在配置类中去覆盖Spring Boot要自动装配的类,进行自定义配置。
3. 什么是 Spring Boot Starter?
答:
- Spring Boot Starters 是一系列依赖关系的集合
- 我们只需要引入一个 Starter,就相当于引入了一系列的依赖。
4. Spring Boot 支持哪些内嵌 Servlet 容器?
答:
- Tomcat:默认的Servlet容器,也是使用最广泛的选项。
- Jetty:轻量级Servlet容器
- Undertow:来自Red Hat的轻量级Servlet容器
5. 如何在Spring Boot中切换Servlet容器
答:
- Spring Boot 默认使用的是
Tomcat
容器,如果要切换的话,可以在spring-boot-starter-web
依赖中排除Tomcat
的依赖。 - 然后手动添加其他容器的依赖。
6. 介绍一下@SpringBootApplication 注解
答:
@SpringBootApplication
包括 3 个注解
@Configuration
: 表明该类是一个配置类@ComponentScan
:扫描包路径,查找所有要注册的Bean@EnableAutoConfiguration
: 开启Spring Boot的自动配置
7. Spring Boot 的自动装配是如何实现的?
答:
- Spring Boot 的自动装配主要是通过
@EnableAutoConfiguration
注解和spring.factories
文件来实现的。 - 在主启动类中添加
@EnableAutoConfiguration
注解,告诉 Spring Boot 开启自动配置功能。 @EnableAutoConfiguration
注解会导入一个AutoConfigurationImportSelector
导入选择器配置类- 在这个配置类中,会读取所有路径下的
META-INF/spring.factories
文件。 - Spring Boot 根据条件加载
spring.factories
文件中类。
8. Spring Boot 加载配置文件的优先级了解么?
答:
- 命令行参数:Spring Boot 会优先加载通过命令行参数传入的配置,因为通常认为这是运行时的特殊需求。
- 程序运行目录的配置文件:程序运行目录下的
config
子目录的配置文件 或是 运行目录下的配置文件 - 资源目录下的配置文件:优先加载
classpath:/config
下的配置文件,然后是classpath
下的配置文件
9. Spring Boot 启动流程
答:
SpringApplication.run(MainApplication.class, args)
方法执行后,首先会创建一个SpringApplication
对象,然后执行对象的run
方法。- 加载
SpringApplicationRunListeners
:可以用来发布Spring Boot启动过程中的事件,供其他组件订阅。 - 创建并配置
Environment
:包含所有外部属性,如配置文件、系统环境变量、命令行参数等。 - 创建
ApplicationContext
:创建IOC容器,并准备配置类和Bean的注册。 刷新容器
,初始化所有的Bean。- 如果实现了
CommandLineRunner
或ApplicationRunner
的方法,就运行它们。 - 返回容器。