大家好,我是锋哥。今天分享关于【SpringBoot的启动原理?】面试题。希望对大家有帮助;
SpringBoot的启动原理?
1000道 互联网大厂Java工程师 精选面试题-Java资源分享网
Spring Boot 的启动原理可以通过以下几个步骤来简要解释:
1. Main方法启动
Spring Boot 应用程序通常以一个 main
方法启动,使用的是 SpringApplication.run()
方法来启动应用。这个方法是 Spring Boot 应用程序启动的入口。
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
2. SpringApplication 类
SpringApplication
是 Spring Boot 的核心类,它的 run()
方法负责启动整个 Spring 上下文,并初始化 Spring 容器。
当你调用 SpringApplication.run()
时,内部会做以下几件事:
- 创建 SpringApplication 实例: 这个实例会启动 Spring 容器的加载过程。
- 设置环境属性: Spring Boot 会从环境中加载一些配置(例如应用的端口、配置文件路径等),并使用默认配置。
- 启动 BeanFactory: Spring Boot 通过 Spring 的
ApplicationContext
(默认是AnnotationConfigApplicationContext
)来启动 BeanFactory,它负责管理应用程序的 Beans(对象)。
3. 加载 Spring Context
Spring Boot 启动时,会自动加载 Spring 配置类和配置文件(例如 application.properties
或 application.yml
)。Spring 容器会通过扫描指定的包和配置文件来初始化 Spring 环境和各个 Bean。
4. 自动配置(Auto Configuration)
Spring Boot 提供了一种 自动配置 机制。它会根据应用程序的依赖来自动配置 Spring 环境。例如,如果应用依赖了 spring-boot-starter-web
,Spring Boot 会自动配置嵌入式的 Web 服务器(如 Tomcat、Jetty 或 Undertow)。
自动配置的核心是 @EnableAutoConfiguration
注解,Spring Boot 会根据类路径中的库来判断应用程序需要哪些配置,并通过特定的配置类来实现自动配置。
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@SpringBootApplication
注解包含了 @EnableAutoConfiguration
,这意味着自动配置机制是启用的。
5. 嵌入式 Web 容器启动
Spring Boot 默认支持嵌入式 Web 容器(如 Tomcat、Jetty 或 Undertow)。当你的应用是一个 Web 应用时,Spring Boot 会自动初始化并启动 Web 容器。如果是一个非 Web 应用,则不会启动 Web 容器。
6. ApplicationContext 初始化
在 Spring Boot 启动过程中,ApplicationContext
被初始化,并且通过 @ComponentScan
注解扫描配置类、组件、服务等 Bean,并将它们注入到 Spring 容器中。
7. ApplicationRunner / CommandLineRunner
Spring Boot 提供了 ApplicationRunner
和 CommandLineRunner
接口,这些接口可以用来在 Spring Boot 启动后执行一些初始化代码。它们分别接收两种类型的参数来执行应用程序的启动后逻辑:
@Component
public class StartupRunner implements CommandLineRunner {
@Override
public void run(String...args) throws Exception {
System.out.println("应用已启动,执行初始化操作");
}
}
总结
Spring Boot 启动过程大致如下:
- 调用
SpringApplication.run()
启动应用程序。 - Spring Boot 初始化 Spring 上下文,并通过自动配置来加载相应的 Bean。
- 如果是 Web 应用程序,Spring Boot 会自动初始化嵌入式 Web 容器(如 Tomcat)。
- 应用启动,
ApplicationContext
被初始化,并扫描和注册应用中的 Beans。 - 自动配置生效,根据类路径中的依赖加载默认配置。
- 应用可访问,Spring Boot 启动成功后,应用准备好接受请求。
这样,Spring Boot 通过自动化配置和嵌入式容器的使用,极大地简化了 Java Web 应用程序的配置和启动过程。