Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

問題:Spring如何在容器啟動和關閉後執行一些初始化動作?

經常我們會遇到一些場景,比如當應用啟動完畢之後做一些初始化動作,比如緩存預熱,數據初始化,開啟服務等等,在應用關閉的時候,執行一些釋放資源,清理的操作。

其實通過Spring自帶的“ContextRefreshedEvent”,“ContextClosedEvent”事件就可以輕鬆實現。

簡單舉例

定義“ContextRefreshedEvent”事件,主要是實現“ApplicationListener”。

問題:Spring如何在容器啟動和關閉後執行一些初始化動作?

經常我們會遇到一些場景,比如當應用啟動完畢之後做一些初始化動作,比如緩存預熱,數據初始化,開啟服務等等,在應用關閉的時候,執行一些釋放資源,清理的操作。

其實通過Spring自帶的“ContextRefreshedEvent”,“ContextClosedEvent”事件就可以輕鬆實現。

簡單舉例

定義“ContextRefreshedEvent”事件,主要是實現“ApplicationListener”。

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義xml文件:

問題:Spring如何在容器啟動和關閉後執行一些初始化動作?

經常我們會遇到一些場景,比如當應用啟動完畢之後做一些初始化動作,比如緩存預熱,數據初始化,開啟服務等等,在應用關閉的時候,執行一些釋放資源,清理的操作。

其實通過Spring自帶的“ContextRefreshedEvent”,“ContextClosedEvent”事件就可以輕鬆實現。

簡單舉例

定義“ContextRefreshedEvent”事件,主要是實現“ApplicationListener”。

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義xml文件:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義啟動類:

問題:Spring如何在容器啟動和關閉後執行一些初始化動作?

經常我們會遇到一些場景,比如當應用啟動完畢之後做一些初始化動作,比如緩存預熱,數據初始化,開啟服務等等,在應用關閉的時候,執行一些釋放資源,清理的操作。

其實通過Spring自帶的“ContextRefreshedEvent”,“ContextClosedEvent”事件就可以輕鬆實現。

簡單舉例

定義“ContextRefreshedEvent”事件,主要是實現“ApplicationListener”。

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義xml文件:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義啟動類:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

看下效果:

main begin..

ContextRefreshedEvent 事件已發生!

main start to close..

ContextClosedEvent 事件已發生!

main end..

很簡單,當你通過這關的時候,這只是剛剛開始,後面往往還有相關的一系列問題,這就是面試官的套路的....

問題二:請問你還使用過哪些Spring標準事件?

Spring容器除了提供“ContextRefreshedEvent”,“ContextClosedEvent”兩個標準事件外,

提供了其他的事件比如“ContextStartedEvent”,“ContextStoppedEvent”。

說道這兩個事件,我們不得不提下Spring定義的一個生命週期接口,

問題:Spring如何在容器啟動和關閉後執行一些初始化動作?

經常我們會遇到一些場景,比如當應用啟動完畢之後做一些初始化動作,比如緩存預熱,數據初始化,開啟服務等等,在應用關閉的時候,執行一些釋放資源,清理的操作。

其實通過Spring自帶的“ContextRefreshedEvent”,“ContextClosedEvent”事件就可以輕鬆實現。

簡單舉例

定義“ContextRefreshedEvent”事件,主要是實現“ApplicationListener”。

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義xml文件:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義啟動類:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

看下效果:

main begin..

ContextRefreshedEvent 事件已發生!

main start to close..

ContextClosedEvent 事件已發生!

main end..

很簡單,當你通過這關的時候,這只是剛剛開始,後面往往還有相關的一系列問題,這就是面試官的套路的....

問題二:請問你還使用過哪些Spring標準事件?

Spring容器除了提供“ContextRefreshedEvent”,“ContextClosedEvent”兩個標準事件外,

提供了其他的事件比如“ContextStartedEvent”,“ContextStoppedEvent”。

說道這兩個事件,我們不得不提下Spring定義的一個生命週期接口,

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

這個接口定義了兩個方法“start”,"stop"分別和事件“ContextStartedEvent”,“ContextStoppedEvent”配合使用。

簡單舉例

實現一個“Lifecycle”類:

問題:Spring如何在容器啟動和關閉後執行一些初始化動作?

經常我們會遇到一些場景,比如當應用啟動完畢之後做一些初始化動作,比如緩存預熱,數據初始化,開啟服務等等,在應用關閉的時候,執行一些釋放資源,清理的操作。

其實通過Spring自帶的“ContextRefreshedEvent”,“ContextClosedEvent”事件就可以輕鬆實現。

簡單舉例

定義“ContextRefreshedEvent”事件,主要是實現“ApplicationListener”。

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義xml文件:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義啟動類:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

看下效果:

main begin..

ContextRefreshedEvent 事件已發生!

main start to close..

ContextClosedEvent 事件已發生!

main end..

很簡單,當你通過這關的時候,這只是剛剛開始,後面往往還有相關的一系列問題,這就是面試官的套路的....

問題二:請問你還使用過哪些Spring標準事件?

Spring容器除了提供“ContextRefreshedEvent”,“ContextClosedEvent”兩個標準事件外,

提供了其他的事件比如“ContextStartedEvent”,“ContextStoppedEvent”。

說道這兩個事件,我們不得不提下Spring定義的一個生命週期接口,

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

這個接口定義了兩個方法“start”,"stop"分別和事件“ContextStartedEvent”,“ContextStoppedEvent”配合使用。

簡單舉例

實現一個“Lifecycle”類:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義事件:

問題:Spring如何在容器啟動和關閉後執行一些初始化動作?

經常我們會遇到一些場景,比如當應用啟動完畢之後做一些初始化動作,比如緩存預熱,數據初始化,開啟服務等等,在應用關閉的時候,執行一些釋放資源,清理的操作。

其實通過Spring自帶的“ContextRefreshedEvent”,“ContextClosedEvent”事件就可以輕鬆實現。

簡單舉例

定義“ContextRefreshedEvent”事件,主要是實現“ApplicationListener”。

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義xml文件:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義啟動類:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

看下效果:

main begin..

ContextRefreshedEvent 事件已發生!

main start to close..

ContextClosedEvent 事件已發生!

main end..

很簡單,當你通過這關的時候,這只是剛剛開始,後面往往還有相關的一系列問題,這就是面試官的套路的....

問題二:請問你還使用過哪些Spring標準事件?

Spring容器除了提供“ContextRefreshedEvent”,“ContextClosedEvent”兩個標準事件外,

提供了其他的事件比如“ContextStartedEvent”,“ContextStoppedEvent”。

說道這兩個事件,我們不得不提下Spring定義的一個生命週期接口,

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

這個接口定義了兩個方法“start”,"stop"分別和事件“ContextStartedEvent”,“ContextStoppedEvent”配合使用。

簡單舉例

實現一個“Lifecycle”類:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義事件:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義一個XML:

問題:Spring如何在容器啟動和關閉後執行一些初始化動作?

經常我們會遇到一些場景,比如當應用啟動完畢之後做一些初始化動作,比如緩存預熱,數據初始化,開啟服務等等,在應用關閉的時候,執行一些釋放資源,清理的操作。

其實通過Spring自帶的“ContextRefreshedEvent”,“ContextClosedEvent”事件就可以輕鬆實現。

簡單舉例

定義“ContextRefreshedEvent”事件,主要是實現“ApplicationListener”。

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義xml文件:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義啟動類:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

看下效果:

main begin..

ContextRefreshedEvent 事件已發生!

main start to close..

ContextClosedEvent 事件已發生!

main end..

很簡單,當你通過這關的時候,這只是剛剛開始,後面往往還有相關的一系列問題,這就是面試官的套路的....

問題二:請問你還使用過哪些Spring標準事件?

Spring容器除了提供“ContextRefreshedEvent”,“ContextClosedEvent”兩個標準事件外,

提供了其他的事件比如“ContextStartedEvent”,“ContextStoppedEvent”。

說道這兩個事件,我們不得不提下Spring定義的一個生命週期接口,

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

這個接口定義了兩個方法“start”,"stop"分別和事件“ContextStartedEvent”,“ContextStoppedEvent”配合使用。

簡單舉例

實現一個“Lifecycle”類:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義事件:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義一個XML:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義啟動類:

問題:Spring如何在容器啟動和關閉後執行一些初始化動作?

經常我們會遇到一些場景,比如當應用啟動完畢之後做一些初始化動作,比如緩存預熱,數據初始化,開啟服務等等,在應用關閉的時候,執行一些釋放資源,清理的操作。

其實通過Spring自帶的“ContextRefreshedEvent”,“ContextClosedEvent”事件就可以輕鬆實現。

簡單舉例

定義“ContextRefreshedEvent”事件,主要是實現“ApplicationListener”。

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義xml文件:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義啟動類:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

看下效果:

main begin..

ContextRefreshedEvent 事件已發生!

main start to close..

ContextClosedEvent 事件已發生!

main end..

很簡單,當你通過這關的時候,這只是剛剛開始,後面往往還有相關的一系列問題,這就是面試官的套路的....

問題二:請問你還使用過哪些Spring標準事件?

Spring容器除了提供“ContextRefreshedEvent”,“ContextClosedEvent”兩個標準事件外,

提供了其他的事件比如“ContextStartedEvent”,“ContextStoppedEvent”。

說道這兩個事件,我們不得不提下Spring定義的一個生命週期接口,

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

這個接口定義了兩個方法“start”,"stop"分別和事件“ContextStartedEvent”,“ContextStoppedEvent”配合使用。

簡單舉例

實現一個“Lifecycle”類:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義事件:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義一個XML:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

定義啟動類:

Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!

輸出結果:

main begin..

context start..

MyLifecycle starting

ContextStartedEvent 事件已發生!

context stop..

MyLifeCycleBean stopping

ContextStoppedEvent 事件已發生!

main end..

知道上面的這兩個事件的,我個人覺得已經很不錯啦,但是面試官不會就此罷手的。

思考題:Spring可以在xml裡的 <bean> 配置中 定義init-method 和 destroy-method ,也可以實現上面的效果,為啥還要定義一個如此相似的功能?如果你知道請留言,證明你很牛!

當然這邊還有一個必須要問題:Spring事件的實現原理。關注我們,後續揭曉!

相關推薦

推薦中...