引言:在SpringBoot啟動的過程中,除了加載容器Bean,還包括在不同的階段調用不同的事件,大部分的事件都是為了容器bean初始化做准備,用事件的方式可以讓我們的SpringBoot初始化更加的靈活,
我們可以自定義事件去作為事件監聽的一個成員,被spring去調用,當然這塊我自己沒有試過, 如果我們想自己開發類似於nacos配置中心這樣的開源框架,那一定是自己去實現事件監聽,讓spring去調
用,梳理了一下事件,大概包含以下幾種類型:
1、Starting 事件類型:ApplicationStartingEvent
在SpringBoot啟動開始時會調用該事件的監聽器,加載的事件類型為ApplicationStartingEvent,事件監聽器包括:LoggingApplicationListener主要是初始化日志的處理器Handler、初始化與格式化相關的
類:BackgroundPreinitializer
2、environmentPrepared 事件類型:ApplicationEnvironmentPreparedEvent
這一步還是比較關鍵的,它會調用Bootstrap事件監聽器,在Bootstrap事件監聽器中,要構造一個非WebServlet類型的spring初始化構造器,和SpringApplication執行一樣,這個構造器主要用來加載環境
變量的,在執行過程中,會調用另外一種事件監聽器ConfigFileApplicationListener,在ConfigFile監聽器主要是遍歷classpath下的本地文件,讀取文件,並加載到environment的source中,執行完,我們
的class下的source下的系統變量 就作為我們下一步Nacos的前置條件。
3、contextPrepared 事件類型:ApplicationContextInitializedEvent
這類事件在跟蹤源碼的過程中,在默認配置下沒有發揮任何作用,沒有任何實際處理邏輯,也許是一種自實現插件式調用吧
4、contextLoaded 事件類型:ApplicationPreparedEvent
增加處理器、注冊與log相關的實例 ,ConfigFileApplicationListener,在此事件中,該監聽器在context里,增加了處理器,處理器主要的作用是拿到默認的配置文件,並放到末尾,LoggingApplicationListener,
在工廠Beanfactory注冊和log相關的實例
5、事件類型:ApplicationStartedEvent
