大家好,我是锋哥。今天分享关于【SpringBoot的启动原理?】面试题。希望对大家有帮助;
SpringBoot的启动原理?
1000道 互联网大厂Java工程师 精选面试题-Java资源分享网
Spring Boot的启动原理主要是通过 SpringApplication 类来启动一个Spring Boot应用。具体的启动流程可以分为以下几个主要步骤:
1. 初始化SpringApplication对象
- Spring Boot应用的启动入口通常是
main
方法,通常是应用的启动类。 - 启动类通过
SpringApplication.run(Application.class, args)
启动应用。SpringApplication
是Spring Boot的核心类,它负责整个应用的启动过程。
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
2. 创建SpringApplication实例
SpringApplication.run()
方法会创建一个SpringApplication
实例,并调用它的run()
方法来启动Spring应用上下文。
SpringApplication application = new SpringApplication(Application.class);
3. 准备和初始化环境
- 在调用
run()
方法时,Spring Boot首先会创建一个ApplicationContext
,并加载所有的配置(如:application.properties
或application.yml
)。 - 它会通过
ConfigurableEnvironment
(也就是 Spring 的环境配置对象)来加载属性配置。此时,Spring Boot 会加载默认的环境配置,如嵌入式Tomcat配置、数据源配置等。
4. 设置命令行参数和配置
- 在Spring Boot应用启动时,
SpringApplication
会解析启动时传递的命令行参数,并在运行时将这些参数设置到Spring环境中。 - 如果应用包含
@SpringBootApplication
注解,它会帮助我们自动配置很多常见的配置(如数据库、JPA、Web应用等)。
5. 创建Spring应用上下文(ApplicationContext)
- Spring Boot会创建一个默认的
AnnotationConfigApplicationContext
或者GenericWebApplicationContext
,它会扫描并加载所有的配置和Bean(包括自动配置的类)。 - 这会根据应用程序中的配置类(标注
@Configuration
或其他配置注解)来初始化 Spring 容器,并自动注入相应的Bean。
6. 自动配置机制
- Spring Boot提供了 自动配置 的机制,借助于
@EnableAutoConfiguration
注解,Spring Boot根据项目的依赖和配置自动判断需要哪些默认配置。 - 例如,如果项目中有
spring-boot-starter-web
依赖,Spring Boot就会自动配置Tomcat作为Web服务器。
7. 运行SpringApplication的生命周期监听器
- 在应用启动过程中,Spring Boot会触发不同的事件,允许开发者监听这些事件来定制应用的行为。比如,
ApplicationEnvironmentPreparedEvent
、ApplicationContextInitializedEvent
、ApplicationPreparedEvent
等事件。
8. 启动嵌入式Web服务器
- 如果是Web应用(比如RESTful API应用),Spring Boot会自动启动一个嵌入式Web服务器。默认情况下,Spring Boot使用Tomcat作为Web服务器,但也可以使用Jetty或Undertow等。
- Spring Boot会根据应用的配置自动启动嵌入式Web服务器,并将应用部署在该服务器上。
9. 执行 CommandLineRunner
或 ApplicationRunner
- 如果应用中有实现了
CommandLineRunner
或ApplicationRunner
接口的Bean,Spring Boot会在应用启动完成后执行这些接口中的run()
方法。 - 这通常用于应用启动后进行一些自定义的初始化工作,比如加载数据、初始化缓存等。
10. 应用启动完毕
- 一旦Spring Boot应用完全启动,
SpringApplication.run()
方法返回并且控制权回到调用者(通常是main方法)。此时,Spring Boot应用就可以接收HTTP请求或执行其他任务。
关键点总结:
- SpringApplication:应用启动的核心类。
- 自动配置:Spring Boot根据项目依赖自动配置常见的服务和组件。
- ApplicationContext:Spring应用上下文,管理所有Bean和配置信息。
- 嵌入式Web服务器:默认启动嵌入式Web服务器(如Tomcat),可以根据需要替换为其他服务器。
- 生命周期监听:Spring Boot通过事件机制触发生命周期相关的操作。
通过这些步骤,Spring Boot应用能够高效、快速地启动并提供服务。