Spring Boot 启动流程详细分析
Spring Boot 是一个基于 Spring 框架的快速应用开发框架,旨在尽可能简化 Spring 应用程序的创建、开发和部署。在 Spring Boot 的背后有一套强大的启动机制和自动化配置。
本文将深入探索 Spring Boot 的启动流程,包括 Spring Boot 的三种启动方式和启动核心类、主函数入口、SpringApplication.run() 方法分析、Spring Boot 的自动配置原理等。
三种 Spring Boot 启动方式
Spring Boot 支持三种启动方式,分别是:
-
命令行方式启动:
在命令行中输入 java -jar demo.jar 即可启动应用程序,demo.jar 是应用的可执行 jar 包。 -
Maven 启动方式:
在 Maven 中使用 Spring Boot 插件,通过调用 Maven 命令启动应用程序。 -
IDE 启动方式:
在集成开发环境(IDE)中,右键单击主类并选择 “Run” 即可启动应用程序。
下面,我们来看一下 Spring Boot 的启动核心类。
启动核心类
SpringApplication
是 Spring Boot 启动的核心类,它提供了各种配置和应用程序的启动方法。SpringApplication 的主要作用是创建一个 Spring 应用程序,并将所有 Spring 组件加载到应用程序的上下文中。
下面是启动核心类的代码片段:
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
SpringApplication.run() 方法分析
SpringApplication 类中有一个静态方法 run()
,它是 Spring Boot 应用程序的入口点。
该方法有两个参数,一个是启动类的 class 对象,另一个是 main 函数的参数 args。
以下是 SpringApplication.run() 方法的流程:
- 创建 Spring 应用程序上下文,并准备启动环境;
- 创建 BeanFactory,并加载所有的 Bean 定义;
- 执行 Spring 应用程序上下文的 refresh() 方法,刷新应用程序上下文;
- 执行 Spring 应用程序上下文的 registerShutdownHook() 方法,注册 JVM 关闭钩子;
- 检测当前应用程序是否正在运行 web 环境;
- 运行应用程序。
Spring Boot 的自动配置原理
Spring Boot 的自动配置原理是基于 Spring Framework 的 spring-factories
机制实现的,它根据 classpath 路径下的 META-INF/spring.factories
文件来自动配置应用程序。
例如org.springframework.boot.autoconfigure.EnableAutoConfiguration
就是 Spring Boot 的自动化配置类,但是实际上具体实现需要到spring-boot-autoconfigure
工程中。
可以在应用程序的配置文件 application.properties 或 application.yml 中配置 Spring Boot 的自动化配置类,例如:
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
以上配置表示 DataSourceAutoConfiguration
不会被自动加载。
示例
下面我们以一个简单的 Spring Boot Web 应用程序为例,来说明 Spring Boot 启动流程的细节。
- 创建一个名为
webdemo
的 Spring Boot Web 应用程序:
$ spring init --dependencies=web webdemo
其中 --dependencies=web
表示我们会使用 Spring Boot Web 依赖。
- 在
src/main/java/com/example/webdemo/
目录下创建一个名为HelloController.java
的类:
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}
在该类中,我们使用 @RestController
注解标记该类为 Spring MVC 控制器,并在该类中创建一个 hello()
方法,该方法返回一个字符串 "Hello, World!"。
- 在
src/main/resources/application.properties
文件中添加如下内容:
server.port=8080
logging.level.root=info
其中,server.port
配置了 Web 服务器端口,logging.level.root
配置了日志级别。
- 运行应用程序:
$ ./mvnw spring-boot:run
运行成功后,在浏览器访问 http://localhost:8080/hello,即可看到输出的字符串 "Hello, World!"。
这就是一个简单的 Spring Boot Web 应用程序的示例,从中我们可以了解到 Spring Boot 的启动流程。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot启动流程详细分析 - Python技术站