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