Spring Boot的啟動原理是通過SpringApplication類來實現(xiàn)的。具體流程如下:
創(chuàng)建一個應(yīng)用程序的SpringApplication實例。
分析應(yīng)用程序的上下文環(huán)境(包括JAVA系統(tǒng)屬性、環(huán)境變量、命令行參數(shù)等),并將其轉(zhuǎn)化為一個可配置的ApplicationContextInitializer列表。
創(chuàng)建一個可配置的Environment實例,并且將其作為參數(shù)傳遞給創(chuàng)建的ApplicationContextInitializer列表中的每個實例進行初始化。
創(chuàng)建一個可配置的ResourceLoader實例,并將其傳遞給創(chuàng)建的ApplicationContextInitializer列表中的每個實例進行初始化。
調(diào)用ApplicationContextInitializer列表中每個實例的initialize方法,對應(yīng)用程序的上下文環(huán)境進行初始化。
創(chuàng)建一個可配置的BeanDefinitionRegistry實例,并將其傳遞給創(chuàng)建的ApplicationContextInitializer列表中的每個實例進行初始化。
創(chuàng)建一個可配置的ApplicationContext實例,并且將其作為參數(shù)傳遞給創(chuàng)建的ApplicationContextInitializer列表中的每個實例進行初始化。
調(diào)用ApplicationContextInitializer列表中每個實例的initialize方法,對ApplicationContext進行初始化。
注冊應(yīng)用程序的主類(如果存在)作為一個bean,并調(diào)用其run方法來啟動應(yīng)用程序。
如果應(yīng)用程序的主類是一個ServletInitializer(用于Web應(yīng)用程序),則通過調(diào)用其onStartup方法來啟動Web容器。
使用Spring的DispatcherServlet來處理HTTP請求。
如果應(yīng)用程序的主類實現(xiàn)了CommandLineRunner接口,則調(diào)用其run方法,以便在應(yīng)用程序啟動后執(zhí)行一些額外的邏輯。
Spring Boot的啟動原理是通過創(chuàng)建SpringApplication實例來分析應(yīng)用程序的上下文環(huán)境并初始化ApplicationContext,然后通過調(diào)用應(yīng)用程序的主類來啟動應(yīng)用程序,同時處理Web請求和執(zhí)行一些額外的邏輯。