spring-boot的啟動(dòng)流程
@SpringBootApplication
public class GaoyiyiApplication {
public static void main(String[] args) {
SpringApplication.run(GaoyiyiApplication.class, args);
}
}
@SpringBootApplication包括三個(gè)注解:
@EnableAutoConfiguration:SpringBoot根據(jù)應(yīng)用所聲明的依賴來(lái)對(duì)Spring框架進(jìn)行自動(dòng)配置悠咱。簡(jiǎn)單概括一下就是坚嗜,是借助@Import的幫助砂心,將所有符合自動(dòng)配置條件的bean定義加載到IoC容器。
@Configuration:它就是JavaConfig形式的Spring Ioc容器的配置類。被標(biāo)注的類等于在spring的XML配置文件中(applicationContext.xml),裝配所有bean事務(wù),提供了一個(gè)spring的上下文環(huán)境。
@ComponentScan:組件掃描衣形,可自動(dòng)發(fā)現(xiàn)和裝配Bean,功能其實(shí)就是自動(dòng)掃描并加載符合條件的組件或者bean定義姿鸿,最終將這些bean定義加載到IoC容器中谆吴。可以通過(guò)basePackages等屬性來(lái)細(xì)粒度的定制@ComponentScan自動(dòng)掃描的范圍苛预,如果不指定句狼,則默認(rèn)Spring框架實(shí)現(xiàn)會(huì)從聲明@ComponentScan所在類的package進(jìn)行掃描。默認(rèn)掃描SpringApplication的run方法里的Booter.class所在的包路徑下文件热某,所以最好將該啟動(dòng)類放到根包路徑下腻菇。
過(guò)程:
第一部分
SpringAppliction會(huì)初始化一個(gè)實(shí)例
/META-INF/spring.factories文件:
將傳入的啟動(dòng)類"com.example.ms.DemoApplication"放入Set集合中
判斷是否為Web環(huán)境:存在(javax.servlet.Servlet && org.springframework.web.context.ConfigurableWebApplicationContext )類則是
創(chuàng)建并初始化ApplicationInitializer列表 (spring.factories)
創(chuàng)建并初始化ApplicationListener列表 (spring.factories)
初始化主類mainApplicatioClass (DemoApplication)
第二部分:
1初始化監(jiān)聽(tīng)器
2發(fā)布ApplicationStartingEvent
3裝配參數(shù)和環(huán)境
4發(fā)布ApplicationEnvironmentPrepareEvent,打印banner昔馋,創(chuàng)建并裝配ApplicationContext
5發(fā)布ApplicationPrepareEvent(refreshContext->afterRefresh)
6發(fā)布ApplicationStartedEvent事件
7執(zhí)行Spring中@Bean下的一下操作筹吐,如靜態(tài)方法等
8發(fā)布ApplicationReadyEvent事件
SpringApplicationRunListener是一個(gè)抽象接口,定義Springboot啟動(dòng)的生命周期方法秘遏。
run方法會(huì)加載所有SpringApplicationRunListener的實(shí)現(xiàn)類丘薛,SpringBoot啟動(dòng)的各個(gè)生命周期中遍歷所有SpringApplicationRunListener的實(shí)現(xiàn)類并調(diào)用對(duì)應(yīng)的生命周期方法。
博客鏈接:https://blog.csdn.net/mnicsm/article/details/93893669
https://blog.csdn.net/qq_35119422/article/details/81559410
http://svip.iocoder.cn/Spring-Boot/Interview/