返回
揭秘SpringBoot的可执行JAR运行机制,一探其背后的奇妙之旅
后端
2023-12-25 09:55:35
## 一、从Java虚拟机到Main Class
当您执行`java -jar xxx.jar`命令时,Java虚拟机(JVM)首先加载并运行JAR包中的引导类加载器(Bootstrap ClassLoader)。引导类加载器负责加载核心库,例如rt.jar,该库包含了Java虚拟机运行所必需的类。
接下来,JVM使用引导类加载器加载`java.lang.Runtime`类,该类提供了启动其他应用程序的方法。`java.lang.Runtime`类使用引导类加载器加载`java.util.Properties`类,该类用于获取系统属性。
JVM使用系统属性来确定JAR包中的主类(Main Class)。主类通常是SpringBoot应用程序的入口点,它包含应用程序的启动逻辑。JVM使用系统类加载器(System ClassLoader)加载主类。系统类加载器负责加载用户定义的类,例如您编写的代码。
## 二、加载Spring Boot应用程序上下文
主类加载后,JVM将创建一个Spring Boot应用程序上下文(Spring Boot Application Context)。应用程序上下文包含了SpringBoot应用程序运行所必需的各种组件,例如Bean、ApplicationListener和BeanFactory。
应用程序上下文由Spring Boot应用程序类的`run()`方法创建。`run()`方法首先使用Spring Application Builder创建一个Spring应用程序构建器(Spring Application Builder)。Spring应用程序构建器用于配置应用程序上下文。
Spring应用程序构建器使用系统类加载器加载SpringBoot应用程序的配置文件,例如application.properties或application.yml。配置文件用于配置应用程序的各种属性,例如数据库连接信息、日志级别等。
Spring应用程序构建器使用系统类加载器加载SpringBoot应用程序的Bean定义文件,例如@Component、@Service和@Repository。Bean定义文件用于定义应用程序中各种组件的类名、作用域和依赖关系。
Spring应用程序构建器使用系统类加载器加载SpringBoot应用程序的ApplicationListener类。ApplicationListener类用于监听应用程序事件,例如应用程序启动事件、应用程序停止事件等。
Spring应用程序构建器使用系统类加载器加载SpringBoot应用程序的BeanFactory。BeanFactory用于创建和管理应用程序中的Bean。
Spring应用程序构建器使用BeanFactory创建应用程序上下文。应用程序上下文包含了SpringBoot应用程序运行所必需的各种组件。
## 三、启动Spring Boot应用程序
应用程序上下文创建后,Spring Boot应用程序就可以启动了。应用程序启动时,Spring Boot应用程序上下文中的Bean将被初始化。Bean初始化后,SpringBoot应用程序就可以正常运行了。
## 四、结束语
SpringBoot的可执行JAR运行机制是一个复杂的过程,涉及到Java虚拟机、类加载器、Spring Boot应用程序上下文等多个组件。通过对SpringBoot可执行JAR运行机制的剖析,我们可以更好地理解SpringBoot应用程序的启动和运行过程。